けむブログ

データ分析に関する気付きや学びを記録するブログ

東京大学松尾研究所の寄付講座、修了しました!

AIの研究で有名な、東京大学の松尾先生が監督する

機械学習の講座の修了証が届きました!

 

仕事でユーザーのアクセスログを見る中で、

データ分析によって得られる客観的な事実とパターンの発見が興味深く、活用の幅も大きいと考えて、勉強を2018年の春頃から始めました。

 

この講座は2018年11月から始まり2019年3月までの約4ヶ月間で、

毎週欠かさずオンライン学習と課題の提出を重ねました。

 

独学でPyQに取り組んだり本をやったりもしていましたが、

この講座では基本のヌケモレを補完しながら、学習のペースを保てたところが良かったです。

 

引き続き、ユーザー理解のためのデータ分析を続けていきたいと思います!

f:id:kemuex:20190702073800j:image

 

 

ユーザークラスタリング手法を調べたのでまとめてみた

ユーザーのクラスタリングをしようと思い、先行事例をググってまとめました! (※前提として、「ログイン機能のないwebサイトにおける、登録者数増加」を最終目的としています。)

結論

  • たくさんある。まずは単純集計して、傾向を掴み、次に以下の切り口を真似するのが良さそう。

ユーザの行動履歴データを用いたコンテンツ興味推移カテゴリの可視化手法

サイバーの広告におけるセグメント分け

調べたものを羅列

行動ログ以外のデータを活用しているもの

注意点や手法など

注意点

  • セグメントの目的を明らかに
  • 良いセグメントの条件
    • MECE
    • ボリュームが偏っても欽一でも構わないが特徴がある状態を目指す
    • 大雑把すぎず、細かすぎない。3-7つくらいが妥当らしい

おおまかな分析手順

  • やり方例
    1. 基本属性でで単純集計する (性別など)
    2. 集計結果をさらに分ける(売上金額、利用状況など)
    3. 説明したい事象に対して、データの意味付けを行い分類する(新規、リピート、リターン)

クラスタリングの切り口

  • 人口動態変数:CVしていないと不明
  • 地理的変数:学校からのアクセス?会社からのアクセス?
  • 行動変数:就職動機、閲覧回数、閲覧時間、購買フェーズ
  • 心理的変数:ライフスタイル、悩みの内容?
    f:id:kemuex:20190107101957p:plain
    https://www.slideshare.net/naototamiya9/ss-76662203

クラスタリングの分析手法をざっと

SQL presto 時間型の変更まとめ

型の種類

timestamp unixtime varchar date

型変換

  1. bigint型のunixtime人間にとって見やいvarchar型にする
TD_TIME_FORMAT(x,'yyyy-MM-dd','JST')
TD_TIME_FORMAT(1420038000 ,'yyyy-MM-dd','JST')
-> 2015-01-01

[in] 1420093526 bigint(unixtime) [out] '2018-10-29' varchar

  1. 人間にとって見やすいvarchar型bihing型のunixtime
TD_TIME_PARSE('2015-01-01','JST')
 -> 1420038000
  1. bigint型のunixtimetimestamp型
FROM_UNIXTIME(time)
FROM_UNIXTIME(1420093526 )
-> 2018-09-10 00:00:00.000

[in] 1420093526 bigint (unixtime) [out] 2018-09-10 00:00:00.000 (timestamp)

その他便利な関数

  1. timestamp型などを引数にもって、指定した単位で切り上げる
DATE_TRUNC(unit.x)
DATE_TRUNC('month', 2018-09-15 00:00:00.000 )
-> 2018-09-01 00:00:00.000

※xにはtimestamp型などが入る

SQL presto bigint型のunixtimeから年月を取り出す方法

やりたいこと

time = 1519822868 [bigint型のunixtime] から年月を取りだしたい

方法

date_trunc('week',FROM_UNIXTIME(time))

解説

  1. bigint型のunixtime→ timestamp型
FROM_UNIXTIME(time)
  1. 年月だけ抜くには「月」で切り上げる
date_trunc('month', x)

※x = timestamp型などが入る

参考

6.13. Date and Time Functions and Operators — Presto 0.213 Documentation

Prestoでの日付の扱い方 - ★データ解析備忘録★

記事の自動タグ付け方法について

記事の自動タグ付けがしたくて、事例を調べてみました!

つまりどれが良さそう?

  • 1記事1タグなら:記事分類→分類ごとに出現頻度の高い単語をタグ付け
  • 1記事nタグなら:本当は事例4のやり方が良さそう。ただBM25の使い方が理解できていない・・

簡単にいうと?

  • 事例1:記事を先に分類し、その中から出現頻度の高い単語をタグとして採用する
  • 事例2:記事ごとに、上位200文字の中からTF-IDFで重要単語として上がったものを5つ設定
  • 事例3:記事ごとに、特徴単語をBM25で抽出してタグ付け
  • 事例4:記事ごとに、独自ロジック(TF=IDF、BM25活用)で特徴単語を抽出しタグとして適用

具体的には?

事例1  ~記事を先に分類し、その中から出現頻度の高い単語をタグとして採用する~

分析手順

  1. カテゴリ別に収集した記事群においてコサイン類似度を用いて記事の類似度を測定する.
  2. 類似度が高く関連性が高い記事を収集する.
  3. 記事群の中でクラスタを生成する.
  4. クラスタ内において頻出単語 (関連タグ) を抽出する.
  5. 頻出単語 (関連タグ) をクラスタを構成する記事に対して付与する f:id:kemuex:20181022112055p:plain

事例2 ~記事上位200文字の中からTF-IDFで重要単語として上がったものを5つ設定~

  • 抽出したキーワードについて,TF-IDF 値を求め,得られた重要タグにタイトルタグとカテゴリタグを追加
  • 加えて、何人かにタグを付けてもらいそれを正解データとして以下の場合でタグ付けした時の正答率を求めている

  • 方法 1:キーワード抽出箇所全文,タグ数 5 つとした場合.→正答率低

  • 方法 2:キーワード抽出箇所 200 文字目まで,タグ数 5 つとした場合.→正答率高
  • 方法 3:キーワード抽出箇所全文,文字数によってタグ数を変化させる場合.→正答率中(記事によっては多くのタグをつけることができ説でない場合がある)

https://www.jstage.jst.go.jp/article/fss/26/0/26_0_21/_pdf/-char/ja

分析手順

  • 記事情報の取得
  • 形態素解析
  • TF-IDF 計算
  • タグ付け
  • 古い記事の削除
  • タグの重要度更新

事例3 ~記事ごとに特徴単語をBM25で抽出してタグ付け~

  • Okapi BM25 の操作を自作して自動タグ付け(※結果精度は粗いらしい)

kyoh86.work

事例4 ~記事ごとに独自ロジック(TF=IDF、BM25活用)で特徴単語を抽出しタグとして適用~

特徴

  • BM25で分類、かつ、一般語を更に弾くために青空文庫のデータを一般辞書としてtf-idfのロジックに組み込む
  • それらのデータを元にタグ付け

inside.pixiv.blog

分類手順

  1. 全作品の説明文を形態素解析器にかけて名詞(うまくいきそうなら副詞や形容詞も)を抽出
  2. BM25という情報検索で使われるアルゴリズムでキーワードを重み付けする
  3. 他の作品と結び付かないキーワードは捨てる(青空文庫のデータを一般辞書としてtf-idfのロジックに組み込む!)
  4. BM25重み付けの値の高い順に上位N個のキーワードを並べてやる(これを作品の「タグ」とする)

記事のメモ

増え続ける検索クエリをしっかり捉えて成果につなげるには?検索クエリ自動追加ツールの導入成功 事例:ビズリーチ

  • AdWords スクリプトで操作できる(複雑そうではないjsでかける)
  • 検索クエリでimpしているもののうち、1週間で1件以上のCVが聞いているものだけ選定し、広告出稿に追加する仕組み → 似たことがオウンドサイト流入側でもできそうだが効果が出るのは4ヶ月後とかになりそう → Googleがどんどん広告周りの機械学習と自動化を進めている  

統計基礎用語おさらい(1)

参考

参考

基本用語

  • 大枠

    • 記述統計:手持ちのデータを整理・把握する
    • 推測統計:未知のデータを推測する
  • 確率密度関数と確率質量関数

    • 確率質量関数:確率が計算結果として出てくる関数のこと(離散型の変数)
    • 確率密度:(連続型の変数の場合)確率を計算できないため、確率の代わりに確率密度を用いる
  • 母数:確率分布を特徴づける値のこと。確率分布のパラメタのこと。(例:正規分布の場合の母数は、平均と分散のこと)

    • 母集団の分布を推定するとは
    • 分布の形を決める
    • 母数を決める ということ。