copyright 2016 Yosuke Katada
クラスタリングと
レコメンデーション
堅田
1
copyright 2016 Yosuke Katada
本日使うライブラリ
トピックモデル(LDA)のライブラリ
• pip install lda
Anacondaを使っている方は以下は不要です。
• pip install pandas
• pip install numpy
• pip install scipy
• pip install scikit-learn
本日使うサンプルコード
https://github.com/yosukekatada/python_ml_study
2
copyright 2016 Yosuke Katada
Wifi
SSID: WA-GN1
セキュリティ: WPA2-PSK(AES)
キー: zeroshinegi53
本日使うサンプルコード
https://github.com/yosukekatada/python_ml_study
3
copyright 2016 Yosuke Katada
自己紹介
4
堅田 洋資(かただ ようすけ)
現在
データサイエンティスト@白ヤギコーポレーション
職歴
● データ分析コンサルタント@デロイトアナリティクス
● マーケティングアナリスト(インターン)@Williams-Sonoma
● アルゴリズム開発@生体センサスタートアップ
● 事業再生コンサルタント@KPMG
● ブランドマーケティング@Mars
学歴
● University of San Francisco, M.S. in Analytics修了
● 一橋大学商学部卒業(統計学・データサイエンス専攻)
趣味
● スラックライン
copyright 2016 Yosuke Katada
本日のアジェンダ
1. クラスタリング
2. 潜在ディリクレ分配法
3. レコメンデーション
5
copyright 2016 Yosuke Katada
クラスタリング
6
copyright 2016 Yosuke Katada
あなたならどう分ける?
7
以下のようなXとYのデータがあり、これらを散布図にすると右下のようになります。
この時、あなたなら、どんなグループに分けますか?
copyright 2016 Yosuke Katada
クラスタリングとは?
データをグルーピングする機械学習の手法
8
応用例
×
× ×
×
×
×
×
×
××
×
×
×
×
×
×
×
×
×
ユーザーや商品のグループ化
  ・どんなユーザーがいるのか?
copyright 2016 Yosuke Katada
クラスタリングの手法の種類
・階層型クラスタリング
・Hierarchical clustering
・非階層型クラスタリング
・K-Means法
・Spectral clustering (今日はやりません)
・SOM(今日はやりません)
9
copyright 2016 Yosuke Katada
クラスタリングの手法の種類
・階層型クラスタリング
・Hierarchical clustering
・非階層型クラスタリング
・K-Means法
・Spectral clustering
・SOM
10
copyright 2016 Yosuke Katada
階層型クラスタリング
11
A B C D E F G H
デンドログラム
距
離
A B C D E F G H
A 0 4 6 8 15 16 19 24
B - 0 5 6 17 15 18 20
C - - 0 6 13 11 16 18
D - - - 0 17 13 18 15
E - - - - 0 2 7 10
F - - - - - 0 6 9
G - - - - - - 0 8
H - - - - - - - 0
距離例
階層型クラスタリングではデンドログラムを構築することが一つ
のゴール
copyright 2016 Yosuke Katada
最も類似している
2番目に類似している
デンドログラム
12
クラスタリングの結合の過程を木で表現したもの
A B C D E
AB
DE
ABC
ABCDE
この高さは結合したク
ラスター間の距離を
表す
copyright 2016 Yosuke Katada
<考え方>
距離の近いクラスター同士を一つのクラスターで段階
的にまとめていく
クラスター間の距離はどうやって定義する?
階層型クラスタリング
13
copyright 2016 Yosuke Katada
クラスタリングの手法の種類
・階層型クラスタリング
・Hierarchical clustering
・非階層型クラスタリング
・K-Means法
・Spectral clustering
・SOM
14
copyright 2016 Yosuke Katada
非階層型クラスタリング
15
<考え方>
あらかじめいくつのクラスターに分けるのかを決め、
決めた数の塊にサンプルを分割する
5つのクラスターに分類
copyright 2016 Yosuke Katada
KMeans法のアルゴリズム
<K-Means法 手順>
1)はじめにk個のシードを置く
2)各サンプルを最も近いシードと同じクラスターに分類
3)k個のクラスターそれぞれで重心を求め、それを新たな
 シードとして更新する
4)重心の位置が変化しなくなるまで 2) ~ 3) を繰り返す
16
copyright 2016 Yosuke Katada 17
K-Means法のアルゴリズム
< K-Means法のイメージ(k=2の場合)>
サンプルの中から2つ選び、それをシードに
設定
各サンプルについて、最も近いシードと同じ
クラスターに分類
各クラスターの重心を求め、それを新たな
シードとして更新
シードの位置が更新されたので、サンプル
を再び分類
再び各クラスターの重心を求め、シード位
置を更新
…
copyright 2016 Yosuke Katada
改めてKMeans法
KMeans法は、各クラスターに含まれるデータ点からクラスター
の重心までの距離の2乗が最小になるようにすること。この数値
をwithin-cluster sum of squares (WCSS)と言ったりします。
18
3つのクラスターに分類
KMeans法の目的関数
Xi : クラスターiに含まれるデータ全て
x : クラスターiに含まれる1つのデータ
μi : クラスターiの重心
copyright 2016 Yosuke Katada
K-Means法のメリット・デメリット
19
<メリット>
1)計算が速い
2)シンプルで実装しやすい
<デメリット>
1)Kを事前に決める必要がある
2)最初のシードの置き方によって分類結果が異なる
copyright 2016 Yosuke Katada
K-Means++法
20
<K-Means法のデメリット>
1)Kを事前に決める必要がある
2)最初のシードの置き方によって分類結果が異なる
K-Means++法で解消
copyright 2016 Yosuke Katada
K-Means++法
21
K-Means法の初期シードの選択の仕方を工夫した改良版
<初期シードの選択方法>
K-Means法 ランダムに選択
K-Means++法    なるべくシード同士が離
           れるように選択
copyright 2016 Yosuke Katada
<K-Means++法 手順>
1. サンプルの中からランダムに1つ選び、シードとする
2. 1つ前のシードと各データ点との距離を測る。
3. 以下の確率で次のシードを選ぶ
4. シードがk個選ばれるまで 2) を繰り返す
5. k個のシードが選択されたら、K-Means法と同様にシードを更新し
ていく
K-Means++法
22
Σ(各データ点といちばん近いシードまでの距離)^2
(あるデータ点といちばん近いシードまでの距離)^2
copyright 2016 Yosuke Katada
K-Means++法
<初期シードのイメージ( k=3の場合)>
サンプルの中からランダムに1つ選び、そ
のサンプルをシードに設定
初めに設定したシードからの距離を計算する
Liの2乗/(L1,L2, L3, L4の距離の2乗和)を確率
として、次のシードを選ぶ。ここでは赤い点
各サンプルから最も近いシードとの距離が一番長
いサンプルを次のシードが選ばれやすくなる。ここ
ではL2が最有力
L1
L2
L3 L1
L2
L3
シード1
L4
シード2
シード3
copyright 2016 Yosuke Katada
やってみよう
ipython notebookを開いて動かして
みよう
24
copyright 2016 Yosuke Katada
最適なクラスター数
K-Means法では事前にクラスター数を決めておく必要あり、クラ
スター数の取り方によって、クラスタリングの精度は左右されて
しまう。
25
いかに最適なクラスター数を探すか?
● Elbow Method
● シルエットプロット
● 階層型クラスタリング
copyright 2016 Yosuke Katada
クラスタリングの結果を考察する概念
• cohesion(凝集性)
• separation(分離性)
26
3つのクラスターに分類
cohesion 高 かつ separation 高
3つのクラスターに分類
cohesion 低 かつ separation 低
copyright 2016 Yosuke Katada
Elbow Method
● 目的関数( = WCSS)が急激に減少し、その後誤差の変化
がなだらかとなるような値をクラスター数として選択
● Elbow Methodは凝集性に着目した方法
目的関数
K
0 1 2 3 4 5 6
クラスター数=3
を選択
27
ひじ(Elbow)のようになってい
る箇所を探す
copyright 2016 Yosuke Katada
シルエットスコア
シルエットスコアとは、各データ点で計算するスコアで、-1 から 1 の値をとり
ます。1に近いほど所属しているクラスタの中心に近く、かつ最も近所のクラ
スターからも遠い場所にいることを示します。言い換えれば、凝集性が高く、
分離性が高ければ1に近くなります
28
3つのクラスターに分類
A
B
C
クラスタAの中の1つのデータ点(iとします)を例に
説明します。
1. Aの中との他の点からの距離の平均を計算
します。その結果をa(i)とします。
2. 異なるクラスタBとCで、それぞれのクラスタ
に含まれる点との平均距離を計算します。
その結果をb(i)とc(i)とします。
3. b(i)とc(i)の中で小さい方(つまり近所の方を
選びます。ここでは仮に b(i)の方が近所だと
しましょう。
4. 上記を組み合わせて、以下のようにシル
エットスコアを計算します
max( a(i), b(i) )
b(i) - a(i)
copyright 2016 Yosuke Katada
シルエットプロット
(k=3のシルエット図の例)
クラスター
1
2
3
シルエットスコア
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
29
すべてのクラスター
の厚さがほとんど
均等になっていれ
ば各クラスターのレ
コード数が均等で
あることがわかる
この線が1つのデータ点
平均シルエットスコア
全サンプルのシルエットスコアの平
均
copyright 2016 Yosuke Katada
例:凝集性・分離性が高いクラスター数が4つ
うまく行っている場合はこんな感じになります。
シルエットプロットを見て気づいた点を挙げましょう。
30
copyright 2016 Yosuke Katada
例: クラスター数がミスマッチの場合
本来あるべきクラスター数より少ないクラスター数の場合。
シルエットプロットを見て気づいた点を挙げましょう。
31
copyright 2016 Yosuke Katada
例:分離が難しい場合
そもそもクラスタリングが難しい場合。
シルエットプロットを見て気づいた点を挙げましょう。
32
copyright 2016 Yosuke Katada
階層型クラスタリングを用いる方法
• 事前に階層型クラスタリングを実施し、その結果からどのくらいのクラスタ数にな
りそうか検討してクラスター数を決定する
• 階層型クラスタリングはデータ数が多いとデンドログラムが見にくいのでサンプリ
ングベースで実施する
33
A B C D E F G H I J K L M N O
クラスター数は
4つくらい
copyright 2016 Yosuke Katada
実務上のクラスター数の選び方のコツ
34
● Elbow Methodやシルエットプロットはクラスタリングしやすい
データを扱わない限り、見た目でわかる綺麗な結果はなかな
か得られないので、あくまで目安として用いる(こだわりすぎな
い)
● クラスター分析の目的に合わせて分析者が解釈可能性、業務
オペレーションに落としやすさ、そしてElbow Methodやシル
エットプロットの結果とのバランスを見て結論を出す
copyright 2016 Yosuke Katada
その他 KMeans法の注意点
• 解釈は人間が行います。
– 各クラスターの中心で解釈
– 決定木を使ったりすることも
• インプットデータのスケールを合わせる
– 目的関数を思い出してください
• クラスターは(超)球面を想定。さらに半径が概
ね同じであることが仮定されている
35
copyright 2016 Yosuke Katada
潜在ディリクレ分配法
36
© 2016 Yosuke Katada
無断転載禁止
ある日、あなたに相談が・・・
あなたは、オンラインニュースアプリ企業のデータサイエンティ
ストです。プロダクトチームから以下のような相談がありました。
• 記事には「政治」「経済」といった大カテゴリは付いているも
のの、さらに中を細かく分けたい
• そうすると閲覧したユーザーの細かい好みがわかったり、も
う少し細かいタグをつけたりできそう
• 記事に詳細なタグが付けられると、閲覧履歴を使ってユー
ザー分析も簡単になるのではという仮説がある
© 2016 Yosuke Katada
無断転載禁止
トピックモデルとは?
記事(文書)データの背後に「トピック」があると想定し、そのト
ピックの組み合わせで記事が生成されていると仮定するモデル
記事(文書)のデータ
ベンチャー
トピック
データ
サイエンス
トピック
AI
トピック
・・・
© 2016 Yosuke Katada
無断転載禁止
トピックモデルとは?
しかし、人間には背後にある「トピック」はわからないので、それ
らの「トピック」を推定するのがトピックモデル
記事(文書)のデータ
?
トピック
?
トピック
?
トピック
・・・
© 2016 Yosuke Katada
無断転載禁止
トピックモデルで使われる手法
• LSI (Latent Semantic Indexing)
• pLSI(Probalistic LSI)
• SVD(特異値分解、Singular Value Decompsition)
• NMF(非負行列分解、Non-Negative Matrix Factorization)
• LDA(潜在ディリクレ分配法、Latent Direichel Allocation)
本講義ではLDAについてお話しします
© 2016 Yosuke Katada
無断転載禁止
手法の話の前に・・・
文書はそのままだと分析できないので、以下のい
テクニックを使って、分析しやすい形に加工する必
要があります。
<加工に関するテクニック>
• 形態素解析
• ベクトル空間モデル
無断転載禁止
形態素解析 = 単語に分割
• 形態素解析: 文章を単語に分解するための解析
© 2016 Shiroyagi Corporation 42
すもももももももものうち
単語に区切る場合、いろいろな切り方がある
• す|も|もも| も|もも|もも|の|うち
• すもも|も|もも|も|もも|の|うち
• すもも|もも|もも|もも|もも|の|うち
すもも も もも も もも の うち
日本語として最も自然な切り方
無断転載禁止
ベクトル空間モデル
© 2016 Shiroyagi Corporation 43
1. 機械学習は今後のテクノロジー戦略を考えるうえで重要だ。
2. アップルは最も革新的なテクノロジー企業のひとつだ。
3. 今日飲んだアップルジュースは格別においしかった。
・
・
文書ID 機械学習 テクノロジー 戦略 アップル 企業 ジュース
1 1 1 1 0 0 0
2 0 1 0 1 1 0
3 0 0 0 1 0 1
単語の出現頻度を行列の形で表現
無断転載禁止
インプットとアウトプット
doc_id 単語1 単語2 ・・・ 単語V
1 0 1 ・・・ 1
2 2 0 ・・・ 0
3 0 0 ・・・ 4
・
・
・
・
・
・
・
・
・
・
 ・
  ・
・
・
・
D 0 5 ・・・ 0
文書 x 単語の行列
(成分は出現頻度)
doc_id トピック
1
トピック
2
・・・ トピック
K
1 0.1 0.05 ・・・ 0.5
2 0.4 0.1 ・・・ 0.3
・
・
・
・
・
・
・
・
・
・
・
・
D 0.9 0.001 ・・・ 0.05
単語1 単語2 ・・・ 単語V
トピック1 0.09 0.001 ・・・ 0.007
トピック2 0.01 0.002 ・・・ 0.04
・
・
・
・
・
・
・
・
・
・
 ・
  ・
・
・
・
トピックK 0.05 0.08 ・・・ 0.01
文書 x トピックの行列
トピック x 単語の行列
LDA
LDAは文書 x 単語の行列を以下に分解
● 文書 x トピックの行列(中身は確率)
● トピック x 単語の行列(中身は確率)
無断転載禁止
トピックの解釈は人間
doc_id 単語1 単語2 ・・・ 単語V
1 0 1 ・・・ 1
2 2 0 ・・・ 0
3 0 0 ・・・ 4
・
・
・
・
・
・
・
・
・
・
 ・
  ・
・
・
・
D 0 5 ・・・ 0
文書 x 単語の行列
(成分は出現頻度)
doc_id トピック
1
トピック
2
・・・ トピック
K
1 0.1 0.05 ・・・ 0.5
2 0.4 0.1 ・・・ 0.3
・
・
・
・
・
・
・
・
・
・
・
・
D 0.9 0.001 ・・・ 0.05
単語1 単語2 ・・・ 単語V
トピック1 0.09 0.001 ・・・ 0.007
トピック2 0.01 0.002 ・・・ 0.04
・
・
・
・
・
・
・
・
・
・
 ・
  ・
・
・
・
トピックK 0.05 0.08 ・・・ 0.01
文書 x トピックの行列
トピック x 単語の行列
LDA
各トピックごとに確率が高い単語を見
て、人間がトピックを解釈する
無断転載禁止
文書をトピックに分けるには?
doc_id 単語1 単語2 ・・・ 単語V
1 0 1 ・・・ 1
2 2 0 ・・・ 0
3 0 0 ・・・ 4
・
・
・
・
・
・
・
・
・
・
 ・
  ・
・
・
・
D 0 5 ・・・ 0
文書 x 単語の行列
(成分は出現頻度)
doc_id トピック
1
トピック
2
・・・ トピック
K
1 0.1 0.05 ・・・ 0.5
2 0.4 0.1 ・・・ 0.3
・
・
・
・
・
・
・
・
・
・
・
・
D 0.9 0.001 ・・・ 0.05
単語1 単語2 ・・・ 単語V
トピック1 0.09 0.001 ・・・ 0.007
トピック2 0.01 0.002 ・・・ 0.04
・
・
・
・
・
・
・
・
・
・
 ・
  ・
・
・
・
トピックK 0.05 0.08 ・・・ 0.01
文書 x トピックの行列
トピック x 単語の行列
LDA
各文書ごとにどのトピックで確率がを最
大かを見て分類する
無断転載禁止
やってみよう
• とりあえず動かしてみよう
• 結果を解釈してみましょう
– トピックが見えてきますか?
© 2016 Yosuke Katada
無断転載禁止
LDAで想定していること
今、手元にある以下の文書Aがあります。これを単語で区切っ
たものを文書データAとします。
サッカー日本代表の試合で、かかっていた音楽が最高だった
今手にしている文書データ
サッカー 日本代表 試合 音楽
LDAでは、4つの単語でできた文書データAは幾つかのトピックに
よって生成されたものと想定しています。
どのような過程で生成されたとみなすのかを見ていきましょう。
© 2016 Yosuke Katada
無断転載禁止
フェス
トピックの箱があるとします
• まず、人間には目に見えない「トピックの箱」があり、その箱
の中には「単語カード」が入っていると仮定します。
• 文書データAで1単語目を引くときに、以下の確率で「トピック
の箱」が選ばれるものと想定します。
サッカー
試合
Jリーグ
セリエA
日本代表
ギター
J-POP
ロック
音楽
大統領選源泉徴収
消
費
税
株
価
日経平均
サッカートピック 音楽トピック 経済トピック
選ばれる確率
80%
選ばれる確率
15%
選ばれる確率
5%
© 2016 Yosuke Katada
無断転載禁止
トピックの箱を確率的に選びます
• 1つ目の単語カードを引くために、「トピックの箱」を確率的に
選び、その結果、「サッカー」トピックの箱が選ばれました。
フェス
サッカー
試合
Jリーグ
セリエA
日本代表
ギター
J-POP
ロック
音楽
大統領選源泉徴収
消
費
税
株
価
日経平均
サッカートピック 音楽トピック 経済トピック
このトピックの箱から引く
© 2016 Yosuke Katada
無断転載禁止
トピックの箱から単語カードを引きます
• 次に選ばれた「トピックの箱」に手を入れて、確率的に単語
カードを1枚引きます。
• その結果、「サッカー」の単語カードが選ばれました。
• つまり1単語目は「サッカー」ということになります。
サッカー
試合
Jリーグ
セリエA
日本代表
サッカートピック
サッカー
確率的に単語カードを引く
© 2016 Yosuke Katada
無断転載禁止
単語数だけ繰り返す
• 「トピックの箱」を確率的に選んで、「単語カード」を確率的に
引く、と言う手順を単語の個数繰り返す
• そうすると、単語カードが4枚揃います。
サッカー 日本代表 試合 音楽
引いたカード
サッカー日本代表の試合で、かかっていた音楽が最高だった
生成された文書(今手にしている文書データ)
この生成過程を過程すると、4単語中、3つが「サッカー」トピック、1つが「音楽」トピッ
クなので、75%(=3/4)の確率でサッカートピック、25%の確率で音楽トピックの文書
だということがわかる。
© 2016 Yosuke Katada
無断転載禁止
まとめると、
LDAで想定している文書の生成プロセスは・・・
サッカー 日本代表 試合 音楽 最高
トピック:
サッカー
トピック
音楽
トピック
K・・・
サッカー
トピック
サッカー
トピック
音楽
トピック
K・・・
音楽
STEP1: まずトピックの箱を確率的に選ぶ
STEP2:
STEP1で選んだトピックの箱から単語カードを 1
枚確率的に選ぶ
© 2016 Yosuke Katada
無断転載禁止
実際に人間が見えるのは文書データのみ
サッカー 日本代表 試合 音楽 最高
トピック1:
?
トピック2
?
トピック
K
?
・・・
?
トピック
1
?
トピック
2
?
トピック
3
?
・・・
?
STEP1: まずトピックの箱を確率的に選ぶ
STEP2:
STEP1で選んだトピックの箱から単語カードを 1
枚確率的に選ぶ
人間の目に見えているのは、ここだけ
この部分は人間にはわ
からないので、
ここを推定したい
LDAの目的は、今手元にある文書データAの背景にある生成過程を推定し、その結果と
して文書データAのトピック(今ならサッカートピック)を知ること
© 2016 Yosuke Katada
無断転載禁止
繰り返しになりますが
• 人間が目に見えるのは(生成された)文書デー
タのみ
• 文書生成プロセスを仮定して、目に見えている
文書データから、各「トピックの箱」からどんな単
語カードが出やすいのかを推定しよう、と言うの
がコンセプト
つまり、LDAのインプットは文書 x 単語の行列(要素は出現
回数)のみ。それだけで、生成プロセスを推定しようと言うの
がコンセプト
© 2016 Yosuke Katada
無断転載禁止
LDAを使う上で人間が与える
ハイパーパラメーター
• トピック数: K
• トピックの箱を選ぶ確率をコントロールするハイパーパラ
メータ: α
• 単語カードが引かれる確率をコントロールするハイパーパラ
メーター: β
K, α, βによって結果が異なるが、イメージしにくいの
はαとβなので、次ページでもう少し詳しく説明しま
す。
© 2016 Yosuke Katada
無断転載禁止
αとβはディリクレ分布のパラメーター
ディリクレ分布とは、複数クラスがあるうち、各クラ
スの目の出やすさを表現する確率分布
例: 今サイコロがあり、ディリクレ分布よりどの面の出やすさ(確
率)をサンプリングする。
1 2 3 4 5 6
0.00 0.99 0.00 0.00 0.00 0.01
0.00 0.00 0.01 0.27 0.72 0.00
1.00 0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.51 0.49
1 2 3 4 5 6
0.13 0.14 0.21 0.26 0.16 0.10
0.15 0.13 0.25 0.19 0.18 0.10
0.12 0.20 0.19 0.09 0.26 0.14
0.24 0.10 0.17 0.13 0.12 0.23
alpha = [0.1, 0,1, 0.1 … 0.1] alpha = [10.0, 10.0, 10.0... . 10.0]
© 2016 Yosuke Katada
無断転載禁止
精度の評価
• (テストデータを用いた)対数尤度
– 0に近いほど良い
• Peplexity
– 小さいほど良いモデル
• Perplexityと人間の解釈しやすさはあまり関係ないという研究もある
https://www.umiacs.umd.edu/~jbg/docs/nips2009-rtl.pdf
Perplexity =
単語の数
対数尤度
exp -
copyright 2016 Yosuke Katada
レコメンデーション
© 2016 Yosuke Katada 59
copyright 2016 Yosuke Katada
こんな画面見たことないですか?
60
copyright 2016 Yosuke Katada
レコメンデーションはビジネスでも重要
61
レコメンデーションはキャッシュポイントに近いため、機械学習の
適用先として重要な技術の一つとなっています。
McKinsey&Company調査(2012年)によると、ECやコンテンツ消
費におけるレコメンドの対売上影響は少なくありません。
● アマゾンは全売り上げの35%がレコメンド経由
● Netflixはコンテンツ消費の75%がレコメンド経由
● Google Newsはレコメンドによりクリック数が38%増加
● Choicestreamの顧客のうち28%が気に入ったレコメンド商品
を追加購入
(出処:http://www.slideshare.net/xamat/recommender-systems-machine-learning-summer-school-2014-cmu p.13)
copyright 2016 Yosuke Katada
レコメンデーションの種類
62
一口にレコメンデーションと言っても色々あります。
協調フィルタリング
-User × User
-Item × Item
・コンテンツベース レコメンデーション
-コンテンツマッチ
-分類機を用いた手法
・コンテキスト アウェア レコメンデーション
-Tensor Factorization
copyright 2016 Yosuke Katada
レコメンデーションの種類
63
一口にレコメンデーションと言っても色々あります。
協調フィルタリング
-User × User
-Item × Item
・コンテンツベース レコメンデーション
-コンテンツマッチ
-分類機を用いた手法
・コンテキスト アウェア レコメンデーション
-Tensor Factorization
copyright 2016 Yosuke Katada
協調フィルタリングのプロセス
協調フィルタリングのステップは
1. 類似度計算のステップ
2. 予測のステップ
で構成されます。
64
user
ID
item ID
user x itemの
行列
類似度の高いユーザー
もしくは
類似度の高い商品
おすすめする商品
類似度計算のステップ 予測のステップ
copyright 2016 Yosuke Katada
協調フィルタリングのプロセス
協調フィルタリングのステップは
1. 類似度計算のステップ
2. 予測のステップ
で構成されます。
65
user
ID
item ID
user x itemの
行列
類似度の高いユーザー
もしくは
類似度の高い商品
おすすめする商品
類似度計算のステップ 予測のステップ
copyright 2016 Yosuke Katada
類似度計算のステップ
66
まず、こんな行列が用意できていることを想定します。
A432 I4321 D4381 K4521 E4103 O3109 V1923 S4333
101 2 5 1 1 0 1 2 4
102 1 5 2 1 4 0 0 3
103 0 3 3 0 1 1 1 1
104 5 2 2 3 1 0 0 4
105 5 3 3 4 1 0 0 5
106 1 4 3 2 5 1 0 1
107 0 0 0 0 0 0 0 2
108 0 4 0 0 0 0 0 0
user
ID
item ID
copyright 2016 Yosuke Katada
A432 I4321 D4381 K4521 E4103 O3109 V1923 S4333
101 2 5 1 1 0 1 2 4
102 1 5 2 1 4 0 0 3
103 0 3 3 0 1 1 1 1
104 5 2 2 3 1 0 0 4
105 5 3 3 4 1 0 0 5
106 1 4 3 2 5 1 0 1
107 0 0 0 0 0 0 0 2
108 0 4 0 0 0 0 0 0
User x Userで類似度を計算
67
user
item
この2つの
ベクトルの
類似度を測る
● 好みの似ているユーザーは購入する商品やレーティングも似
ていると仮定して類似度の高いユーザーを調べる
copyright 2016 Yosuke Katada
A432 I4321 D4381 K4521 E4103 O3109 V1923 S4333
101 2 5 1 1 0 1 2 4
102 1 5 2 1 4 0 0 3
103 0 3 3 0 1 1 1 1
104 5 2 2 3 1 0 0 4
105 5 3 3 4 1 0 0 5
106 1 4 3 2 5 1 0 1
107 0 0 0 0 0 0 0 2
108 0 4 0 0 0 0 0 0
Item x Itemで類似度を計算
68
user
item
● 今度は、併せ買いされる商品はユーザーの購入パターン
も似ていると想定する。
この2つの
ベクトルの
類似度を測る
copyright 2016 Yosuke Katada
コサイン類似度
69
• コサイン類似度はベクトルの角度を測る方法
• ベクトルのなす角度によって類似度を測定
cos90度 = 0 cos30度 = 0.8
copyright 2016 Yosuke Katada
協調フィルタリングのプロセス
協調フィルタリングのステップは
1. 類似度計算のステップ
2. 予測のステップ
で構成されます。
70
user
ID
item ID
user x itemの
行列
類似度の高いユーザー
もしくは
類似度の高い商品
おすすめする商品
類似度計算のステップ 予測のステップ
copyright 2016 Yosuke Katada
予測のステップ
1つのやり方として類似度とレーティングの加重平均が大きい
ものを優先して掲出する方法があります。
71
類似度 A432
類似度 x
A432
I4321
類似度 x
I4321
D4381
類似度 x
D4381
101 0.98 2 1.96 5 4.9 1 0.98
102 0.92 1 0.92 5 4.6 2 1.84
103 0.88 3 2.64 3 2.64
104 0.76 5 3.8 2 1.52 2 1.52
106 0.65 1 0.65 4 2.6 3 1.95
類似度 x
レーティング
7.33 16.26 8.93
類似度の合計 3.31 4.19 4.19
平均類似度 2.21 3.88 2.13
①類似度 x レーティングを計算して、その合計を出します。②類似度の合計を出します。
③類似度 xレーティングの合計/類似度の合計を計算します。
copyright 2016 Yosuke Katada
Pythonでちょっとやってみましょう
レコメンデーション.ipynbを開いてみましょう。
72
copyright 2016 Yosuke Katada
新規ユーザーや新商品はどうする?
• 新規ユーザーや新商品はフィードバックが少ないため、協
調フィルタリングが有効に作用しにくい
• これをコールドスタート問題と言います。
73
A432 I4321 D4381 K4521 E4103 O3109 V1923 S4333
101 2 5 1 1 0 1 2 4
102 1 5 2 1 4 0 0 3
103 0 3 3 0 1 1 1 1
104 5 2 2 3 1 0 0 4
105 5 3 3 4 1 0 0 5
106 1 4 3 2 5 1 0 1
107 0 0 0 0 0 0 0 2
108 0 4 0 0 0 0 0 0
あまり
フィードバックがな
い・・・
copyright 2016 Yosuke Katada
コールドスタート問題の解決方法
• 売上ランキング上位のものを出す?
• コンテンツベースのレコメンデーションで推薦す
る?
• もうフィードバックをもらえそうなユーザーに聞い
ちゃう?
– https://research.yahoo.com/mobstor/publication_attachments/exUseM
e_RecSys2015_CameraReady.pdf
• 次元削減手法を使って見る
– Netflix Prizeでも成果を上げた方法
• https://datajobs.com/data-science-repo/Recommender-Systems-[
Netflix].pdf
74
copyright 2016 Yosuke Katada
次元削減の手法
user x itemの行列を
• user x 潜在変数(次元数はitem数より少ない)
• 潜在変数 x item
の行列に分解する
<主な次元削減手法>
• 特異値分解
• 非負値行列分解
• 主成分分析
75
© 2016 yosuke katada
無断転載・複製・利用を禁ず
特異値分解のざっくりした説明
• 長方形行列の行列分解できるようにしたものが
特異値分解
76
A = UΣV =
T
u1 u2 ・・・
σ
σ
・・・
0
0
1
2
v1 v2 ・・・
T
0
0
0
© 2016 yosuke katada
無断転載・複製・利用を禁ず
特異値分解の使いみち
機械学習の分野では次元圧縮の一種
77
ユーザー
(user_id)
商品
(title_id)
U
ユーザー
(user_id)
潜在因子
Σ V
A
レコメンデーションやクラスタリングなど、ユーザー x 商品の行列を作ることがある。
その場合、商品(title_id)は数千から数十万アイテムになることが多く、このような高次元なデータを
より低い次元のデータに圧縮したい時がある。
その時に威力を発揮するのが、特異値分解である
非負値行列分解
78
• 分解した後の行列の要素がすべて正になるよう
にしたものが非負行列分解
• 自分で何次元に圧縮するかを決める
• 二乗誤差が小さくなるよう分解される
78
X = UV = u1 u2 ・・・ v1 v2 ・・・
T
T
列の数(次元数)は自分で決める
レコメンデーションにおける
非負値行列分解
79
ユーザー
(user_id)
商品
(title_id)
U
ユーザー
(user_id)
V
A
商品
(title_id)
レコメンデーションでは、ユーザー x 商品の行列を
• 「ユーザー」と「潜在変数」の
ユーザーの
潜在変数
商品の潜在変数
ユーザー×商品の行列のような非負行列の分解では、
非負値行列分解の方が解釈しやすい
copyright 2016 Yosuke Katada
コンテンツベース
80
一口にレコメンデーションと言っても色々あります。
協調フィルタリング
-User × User
-Item × Item
・コンテンツベース レコメンデーション
-コンテンツマッチ
-分類機を用いた手法
・コンテキスト アウェア レコメンデーション
-Tensor Factorization
copyright 2016 Yosuke Katada
コンテンツマッチ
81
単語に分解
TF-IDFによる
重み付け
類似度の計算
記事タイトル
記事本文
商品タイトル
商品説明文
記
事
商
品
単語A: 17
単語B: 14
単語C: 5
単語D: 5
・
・
・
単語A: 5
単語E: 1
単語F: 1
単語G: 1
単語H: 1
・
・
・
単語A: 1.11
単語B: 0.65
単語C: 0.36
単語D: 0.17
・
・
・
単語A: 3.17
単語E: 0.27
単語F: 0.45
単語G: 0.78
単語H: 0.61
・
・
・
類似度
(コサイン類似度)
0.661637
記事タイトル・本文と商品タイトル・本文を単語に分解し、固有名詞のみを抽出する。そ
の後、特徴的な単語に重みがつくように重みづけを行い、類似度を計算する。これを記
事 x 商品の組み合わせで計算を行い、各記事において上位N件の商品を掲出する。
テキスト
テキスト
テキスト
テキスト
copyright 2016 Yosuke Katada
分類器を用いた方法
82
クリック 商品変数1 商品変数2 ・・・ カテゴリ タグ tree1 ・・・ tree100 記事タグ x
商品変数1
・・・
0 AA A, N A 経済
日本経済
3 5 経済_AA
日本経済_AA
1 AB B, I A 経済
日本経済
6 4 経済_AB
日本経済_AB
0 AE K, I, S A 経済
日本経済
3 9 経済_AE
日本経済_AE
0 AR L, O, J A 経済
日本経済
2 4 経済_AR
日本経済_AR
商品関連のタグ 記事関連のタグ タグ化された
定量データ
商品関連タグ x
記事関連タグ
インプット
アウト
プット
予測
クリックの有無をターゲットの変数にして、商品・記事の特徴量の組
み合わせからクリックされるかどうかを予測する方法
copyright 2016 Yosuke Katada
最後に少しだけ
83
一口にレコメンデーションと言っても色々あります。
協調フィルタリング
-User × User
-Item × Item
・コンテンツベース レコメンデーション
-コンテンツマッチ
-分類機を用いた手法
・コンテキスト アウェア レコメンデーション
-テンソル分解
copyright 2016 Yosuke Katada
テンソル分解
84
1. ユーザーを商品とコンテキストの3次元テンソルを作成
2. テンソル分解により3次元テンソルを2次元行列に分解
3. 得られたユーザー x 潜在因子の行列Aをクラスタリングし、そのユーザー属
性を読み取ることで、クラスターを理解する
ユーザー
(user_id)
商品
コンテキスト
(例:平日・休日の時間帯別)
A
ユーザー
潜在因子
B
商品Cコンテキスト
3次元テンソル
要素は時間割合
コア
テンソル
copyright 2016 Yosuke Katada
ご清聴ありがとうございました!
良いお年を!
85

クラスタリングとレコメンデーション資料

  • 1.
    copyright 2016 YosukeKatada クラスタリングと レコメンデーション 堅田 1
  • 2.
    copyright 2016 YosukeKatada 本日使うライブラリ トピックモデル(LDA)のライブラリ • pip install lda Anacondaを使っている方は以下は不要です。 • pip install pandas • pip install numpy • pip install scipy • pip install scikit-learn 本日使うサンプルコード https://github.com/yosukekatada/python_ml_study 2
  • 3.
    copyright 2016 YosukeKatada Wifi SSID: WA-GN1 セキュリティ: WPA2-PSK(AES) キー: zeroshinegi53 本日使うサンプルコード https://github.com/yosukekatada/python_ml_study 3
  • 4.
    copyright 2016 YosukeKatada 自己紹介 4 堅田 洋資(かただ ようすけ) 現在 データサイエンティスト@白ヤギコーポレーション 職歴 ● データ分析コンサルタント@デロイトアナリティクス ● マーケティングアナリスト(インターン)@Williams-Sonoma ● アルゴリズム開発@生体センサスタートアップ ● 事業再生コンサルタント@KPMG ● ブランドマーケティング@Mars 学歴 ● University of San Francisco, M.S. in Analytics修了 ● 一橋大学商学部卒業(統計学・データサイエンス専攻) 趣味 ● スラックライン
  • 5.
    copyright 2016 YosukeKatada 本日のアジェンダ 1. クラスタリング 2. 潜在ディリクレ分配法 3. レコメンデーション 5
  • 6.
    copyright 2016 YosukeKatada クラスタリング 6
  • 7.
    copyright 2016 YosukeKatada あなたならどう分ける? 7 以下のようなXとYのデータがあり、これらを散布図にすると右下のようになります。 この時、あなたなら、どんなグループに分けますか?
  • 8.
    copyright 2016 YosukeKatada クラスタリングとは? データをグルーピングする機械学習の手法 8 応用例 × × × × × × × × ×× × × × × × × × × × ユーザーや商品のグループ化   ・どんなユーザーがいるのか?
  • 9.
    copyright 2016 YosukeKatada クラスタリングの手法の種類 ・階層型クラスタリング ・Hierarchical clustering ・非階層型クラスタリング ・K-Means法 ・Spectral clustering (今日はやりません) ・SOM(今日はやりません) 9
  • 10.
    copyright 2016 YosukeKatada クラスタリングの手法の種類 ・階層型クラスタリング ・Hierarchical clustering ・非階層型クラスタリング ・K-Means法 ・Spectral clustering ・SOM 10
  • 11.
    copyright 2016 YosukeKatada 階層型クラスタリング 11 A B C D E F G H デンドログラム 距 離 A B C D E F G H A 0 4 6 8 15 16 19 24 B - 0 5 6 17 15 18 20 C - - 0 6 13 11 16 18 D - - - 0 17 13 18 15 E - - - - 0 2 7 10 F - - - - - 0 6 9 G - - - - - - 0 8 H - - - - - - - 0 距離例 階層型クラスタリングではデンドログラムを構築することが一つ のゴール
  • 12.
    copyright 2016 YosukeKatada 最も類似している 2番目に類似している デンドログラム 12 クラスタリングの結合の過程を木で表現したもの A B C D E AB DE ABC ABCDE この高さは結合したク ラスター間の距離を 表す
  • 13.
    copyright 2016 YosukeKatada <考え方> 距離の近いクラスター同士を一つのクラスターで段階 的にまとめていく クラスター間の距離はどうやって定義する? 階層型クラスタリング 13
  • 14.
    copyright 2016 YosukeKatada クラスタリングの手法の種類 ・階層型クラスタリング ・Hierarchical clustering ・非階層型クラスタリング ・K-Means法 ・Spectral clustering ・SOM 14
  • 15.
    copyright 2016 YosukeKatada 非階層型クラスタリング 15 <考え方> あらかじめいくつのクラスターに分けるのかを決め、 決めた数の塊にサンプルを分割する 5つのクラスターに分類
  • 16.
    copyright 2016 YosukeKatada KMeans法のアルゴリズム <K-Means法 手順> 1)はじめにk個のシードを置く 2)各サンプルを最も近いシードと同じクラスターに分類 3)k個のクラスターそれぞれで重心を求め、それを新たな  シードとして更新する 4)重心の位置が変化しなくなるまで 2) ~ 3) を繰り返す 16
  • 17.
    copyright 2016 YosukeKatada 17 K-Means法のアルゴリズム < K-Means法のイメージ(k=2の場合)> サンプルの中から2つ選び、それをシードに 設定 各サンプルについて、最も近いシードと同じ クラスターに分類 各クラスターの重心を求め、それを新たな シードとして更新 シードの位置が更新されたので、サンプル を再び分類 再び各クラスターの重心を求め、シード位 置を更新 …
  • 18.
    copyright 2016 YosukeKatada 改めてKMeans法 KMeans法は、各クラスターに含まれるデータ点からクラスター の重心までの距離の2乗が最小になるようにすること。この数値 をwithin-cluster sum of squares (WCSS)と言ったりします。 18 3つのクラスターに分類 KMeans法の目的関数 Xi : クラスターiに含まれるデータ全て x : クラスターiに含まれる1つのデータ μi : クラスターiの重心
  • 19.
    copyright 2016 YosukeKatada K-Means法のメリット・デメリット 19 <メリット> 1)計算が速い 2)シンプルで実装しやすい <デメリット> 1)Kを事前に決める必要がある 2)最初のシードの置き方によって分類結果が異なる
  • 20.
    copyright 2016 YosukeKatada K-Means++法 20 <K-Means法のデメリット> 1)Kを事前に決める必要がある 2)最初のシードの置き方によって分類結果が異なる K-Means++法で解消
  • 21.
    copyright 2016 YosukeKatada K-Means++法 21 K-Means法の初期シードの選択の仕方を工夫した改良版 <初期シードの選択方法> K-Means法 ランダムに選択 K-Means++法    なるべくシード同士が離            れるように選択
  • 22.
    copyright 2016 YosukeKatada <K-Means++法 手順> 1. サンプルの中からランダムに1つ選び、シードとする 2. 1つ前のシードと各データ点との距離を測る。 3. 以下の確率で次のシードを選ぶ 4. シードがk個選ばれるまで 2) を繰り返す 5. k個のシードが選択されたら、K-Means法と同様にシードを更新し ていく K-Means++法 22 Σ(各データ点といちばん近いシードまでの距離)^2 (あるデータ点といちばん近いシードまでの距離)^2
  • 23.
    copyright 2016 YosukeKatada K-Means++法 <初期シードのイメージ( k=3の場合)> サンプルの中からランダムに1つ選び、そ のサンプルをシードに設定 初めに設定したシードからの距離を計算する Liの2乗/(L1,L2, L3, L4の距離の2乗和)を確率 として、次のシードを選ぶ。ここでは赤い点 各サンプルから最も近いシードとの距離が一番長 いサンプルを次のシードが選ばれやすくなる。ここ ではL2が最有力 L1 L2 L3 L1 L2 L3 シード1 L4 シード2 シード3
  • 24.
    copyright 2016 YosukeKatada やってみよう ipython notebookを開いて動かして みよう 24
  • 25.
    copyright 2016 YosukeKatada 最適なクラスター数 K-Means法では事前にクラスター数を決めておく必要あり、クラ スター数の取り方によって、クラスタリングの精度は左右されて しまう。 25 いかに最適なクラスター数を探すか? ● Elbow Method ● シルエットプロット ● 階層型クラスタリング
  • 26.
    copyright 2016 YosukeKatada クラスタリングの結果を考察する概念 • cohesion(凝集性) • separation(分離性) 26 3つのクラスターに分類 cohesion 高 かつ separation 高 3つのクラスターに分類 cohesion 低 かつ separation 低
  • 27.
    copyright 2016 YosukeKatada Elbow Method ● 目的関数( = WCSS)が急激に減少し、その後誤差の変化 がなだらかとなるような値をクラスター数として選択 ● Elbow Methodは凝集性に着目した方法 目的関数 K 0 1 2 3 4 5 6 クラスター数=3 を選択 27 ひじ(Elbow)のようになってい る箇所を探す
  • 28.
    copyright 2016 YosukeKatada シルエットスコア シルエットスコアとは、各データ点で計算するスコアで、-1 から 1 の値をとり ます。1に近いほど所属しているクラスタの中心に近く、かつ最も近所のクラ スターからも遠い場所にいることを示します。言い換えれば、凝集性が高く、 分離性が高ければ1に近くなります 28 3つのクラスターに分類 A B C クラスタAの中の1つのデータ点(iとします)を例に 説明します。 1. Aの中との他の点からの距離の平均を計算 します。その結果をa(i)とします。 2. 異なるクラスタBとCで、それぞれのクラスタ に含まれる点との平均距離を計算します。 その結果をb(i)とc(i)とします。 3. b(i)とc(i)の中で小さい方(つまり近所の方を 選びます。ここでは仮に b(i)の方が近所だと しましょう。 4. 上記を組み合わせて、以下のようにシル エットスコアを計算します max( a(i), b(i) ) b(i) - a(i)
  • 29.
    copyright 2016 YosukeKatada シルエットプロット (k=3のシルエット図の例) クラスター 1 2 3 シルエットスコア 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 29 すべてのクラスター の厚さがほとんど 均等になっていれ ば各クラスターのレ コード数が均等で あることがわかる この線が1つのデータ点 平均シルエットスコア 全サンプルのシルエットスコアの平 均
  • 30.
    copyright 2016 YosukeKatada 例:凝集性・分離性が高いクラスター数が4つ うまく行っている場合はこんな感じになります。 シルエットプロットを見て気づいた点を挙げましょう。 30
  • 31.
    copyright 2016 YosukeKatada 例: クラスター数がミスマッチの場合 本来あるべきクラスター数より少ないクラスター数の場合。 シルエットプロットを見て気づいた点を挙げましょう。 31
  • 32.
    copyright 2016 YosukeKatada 例:分離が難しい場合 そもそもクラスタリングが難しい場合。 シルエットプロットを見て気づいた点を挙げましょう。 32
  • 33.
    copyright 2016 YosukeKatada 階層型クラスタリングを用いる方法 • 事前に階層型クラスタリングを実施し、その結果からどのくらいのクラスタ数にな りそうか検討してクラスター数を決定する • 階層型クラスタリングはデータ数が多いとデンドログラムが見にくいのでサンプリ ングベースで実施する 33 A B C D E F G H I J K L M N O クラスター数は 4つくらい
  • 34.
    copyright 2016 YosukeKatada 実務上のクラスター数の選び方のコツ 34 ● Elbow Methodやシルエットプロットはクラスタリングしやすい データを扱わない限り、見た目でわかる綺麗な結果はなかな か得られないので、あくまで目安として用いる(こだわりすぎな い) ● クラスター分析の目的に合わせて分析者が解釈可能性、業務 オペレーションに落としやすさ、そしてElbow Methodやシル エットプロットの結果とのバランスを見て結論を出す
  • 35.
    copyright 2016 YosukeKatada その他 KMeans法の注意点 • 解釈は人間が行います。 – 各クラスターの中心で解釈 – 決定木を使ったりすることも • インプットデータのスケールを合わせる – 目的関数を思い出してください • クラスターは(超)球面を想定。さらに半径が概 ね同じであることが仮定されている 35
  • 36.
    copyright 2016 YosukeKatada 潜在ディリクレ分配法 36
  • 37.
    © 2016 YosukeKatada 無断転載禁止 ある日、あなたに相談が・・・ あなたは、オンラインニュースアプリ企業のデータサイエンティ ストです。プロダクトチームから以下のような相談がありました。 • 記事には「政治」「経済」といった大カテゴリは付いているも のの、さらに中を細かく分けたい • そうすると閲覧したユーザーの細かい好みがわかったり、も う少し細かいタグをつけたりできそう • 記事に詳細なタグが付けられると、閲覧履歴を使ってユー ザー分析も簡単になるのではという仮説がある
  • 38.
    © 2016 YosukeKatada 無断転載禁止 トピックモデルとは? 記事(文書)データの背後に「トピック」があると想定し、そのト ピックの組み合わせで記事が生成されていると仮定するモデル 記事(文書)のデータ ベンチャー トピック データ サイエンス トピック AI トピック ・・・
  • 39.
    © 2016 YosukeKatada 無断転載禁止 トピックモデルとは? しかし、人間には背後にある「トピック」はわからないので、それ らの「トピック」を推定するのがトピックモデル 記事(文書)のデータ ? トピック ? トピック ? トピック ・・・
  • 40.
    © 2016 YosukeKatada 無断転載禁止 トピックモデルで使われる手法 • LSI (Latent Semantic Indexing) • pLSI(Probalistic LSI) • SVD(特異値分解、Singular Value Decompsition) • NMF(非負行列分解、Non-Negative Matrix Factorization) • LDA(潜在ディリクレ分配法、Latent Direichel Allocation) 本講義ではLDAについてお話しします
  • 41.
    © 2016 YosukeKatada 無断転載禁止 手法の話の前に・・・ 文書はそのままだと分析できないので、以下のい テクニックを使って、分析しやすい形に加工する必 要があります。 <加工に関するテクニック> • 形態素解析 • ベクトル空間モデル
  • 42.
    無断転載禁止 形態素解析 = 単語に分割 •形態素解析: 文章を単語に分解するための解析 © 2016 Shiroyagi Corporation 42 すもももももももものうち 単語に区切る場合、いろいろな切り方がある • す|も|もも| も|もも|もも|の|うち • すもも|も|もも|も|もも|の|うち • すもも|もも|もも|もも|もも|の|うち すもも も もも も もも の うち 日本語として最も自然な切り方
  • 43.
    無断転載禁止 ベクトル空間モデル © 2016 ShiroyagiCorporation 43 1. 機械学習は今後のテクノロジー戦略を考えるうえで重要だ。 2. アップルは最も革新的なテクノロジー企業のひとつだ。 3. 今日飲んだアップルジュースは格別においしかった。 ・ ・ 文書ID 機械学習 テクノロジー 戦略 アップル 企業 ジュース 1 1 1 1 0 0 0 2 0 1 0 1 1 0 3 0 0 0 1 0 1 単語の出現頻度を行列の形で表現
  • 44.
    無断転載禁止 インプットとアウトプット doc_id 単語1 単語2・・・ 単語V 1 0 1 ・・・ 1 2 2 0 ・・・ 0 3 0 0 ・・・ 4 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・  ・   ・ ・ ・ ・ D 0 5 ・・・ 0 文書 x 単語の行列 (成分は出現頻度) doc_id トピック 1 トピック 2 ・・・ トピック K 1 0.1 0.05 ・・・ 0.5 2 0.4 0.1 ・・・ 0.3 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ D 0.9 0.001 ・・・ 0.05 単語1 単語2 ・・・ 単語V トピック1 0.09 0.001 ・・・ 0.007 トピック2 0.01 0.002 ・・・ 0.04 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・  ・   ・ ・ ・ ・ トピックK 0.05 0.08 ・・・ 0.01 文書 x トピックの行列 トピック x 単語の行列 LDA LDAは文書 x 単語の行列を以下に分解 ● 文書 x トピックの行列(中身は確率) ● トピック x 単語の行列(中身は確率)
  • 45.
    無断転載禁止 トピックの解釈は人間 doc_id 単語1 単語2・・・ 単語V 1 0 1 ・・・ 1 2 2 0 ・・・ 0 3 0 0 ・・・ 4 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・  ・   ・ ・ ・ ・ D 0 5 ・・・ 0 文書 x 単語の行列 (成分は出現頻度) doc_id トピック 1 トピック 2 ・・・ トピック K 1 0.1 0.05 ・・・ 0.5 2 0.4 0.1 ・・・ 0.3 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ D 0.9 0.001 ・・・ 0.05 単語1 単語2 ・・・ 単語V トピック1 0.09 0.001 ・・・ 0.007 トピック2 0.01 0.002 ・・・ 0.04 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・  ・   ・ ・ ・ ・ トピックK 0.05 0.08 ・・・ 0.01 文書 x トピックの行列 トピック x 単語の行列 LDA 各トピックごとに確率が高い単語を見 て、人間がトピックを解釈する
  • 46.
    無断転載禁止 文書をトピックに分けるには? doc_id 単語1 単語2・・・ 単語V 1 0 1 ・・・ 1 2 2 0 ・・・ 0 3 0 0 ・・・ 4 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・  ・   ・ ・ ・ ・ D 0 5 ・・・ 0 文書 x 単語の行列 (成分は出現頻度) doc_id トピック 1 トピック 2 ・・・ トピック K 1 0.1 0.05 ・・・ 0.5 2 0.4 0.1 ・・・ 0.3 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ D 0.9 0.001 ・・・ 0.05 単語1 単語2 ・・・ 単語V トピック1 0.09 0.001 ・・・ 0.007 トピック2 0.01 0.002 ・・・ 0.04 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・  ・   ・ ・ ・ ・ トピックK 0.05 0.08 ・・・ 0.01 文書 x トピックの行列 トピック x 単語の行列 LDA 各文書ごとにどのトピックで確率がを最 大かを見て分類する
  • 47.
  • 48.
    © 2016 YosukeKatada 無断転載禁止 LDAで想定していること 今、手元にある以下の文書Aがあります。これを単語で区切っ たものを文書データAとします。 サッカー日本代表の試合で、かかっていた音楽が最高だった 今手にしている文書データ サッカー 日本代表 試合 音楽 LDAでは、4つの単語でできた文書データAは幾つかのトピックに よって生成されたものと想定しています。 どのような過程で生成されたとみなすのかを見ていきましょう。
  • 49.
    © 2016 YosukeKatada 無断転載禁止 フェス トピックの箱があるとします • まず、人間には目に見えない「トピックの箱」があり、その箱 の中には「単語カード」が入っていると仮定します。 • 文書データAで1単語目を引くときに、以下の確率で「トピック の箱」が選ばれるものと想定します。 サッカー 試合 Jリーグ セリエA 日本代表 ギター J-POP ロック 音楽 大統領選源泉徴収 消 費 税 株 価 日経平均 サッカートピック 音楽トピック 経済トピック 選ばれる確率 80% 選ばれる確率 15% 選ばれる確率 5%
  • 50.
    © 2016 YosukeKatada 無断転載禁止 トピックの箱を確率的に選びます • 1つ目の単語カードを引くために、「トピックの箱」を確率的に 選び、その結果、「サッカー」トピックの箱が選ばれました。 フェス サッカー 試合 Jリーグ セリエA 日本代表 ギター J-POP ロック 音楽 大統領選源泉徴収 消 費 税 株 価 日経平均 サッカートピック 音楽トピック 経済トピック このトピックの箱から引く
  • 51.
    © 2016 YosukeKatada 無断転載禁止 トピックの箱から単語カードを引きます • 次に選ばれた「トピックの箱」に手を入れて、確率的に単語 カードを1枚引きます。 • その結果、「サッカー」の単語カードが選ばれました。 • つまり1単語目は「サッカー」ということになります。 サッカー 試合 Jリーグ セリエA 日本代表 サッカートピック サッカー 確率的に単語カードを引く
  • 52.
    © 2016 YosukeKatada 無断転載禁止 単語数だけ繰り返す • 「トピックの箱」を確率的に選んで、「単語カード」を確率的に 引く、と言う手順を単語の個数繰り返す • そうすると、単語カードが4枚揃います。 サッカー 日本代表 試合 音楽 引いたカード サッカー日本代表の試合で、かかっていた音楽が最高だった 生成された文書(今手にしている文書データ) この生成過程を過程すると、4単語中、3つが「サッカー」トピック、1つが「音楽」トピッ クなので、75%(=3/4)の確率でサッカートピック、25%の確率で音楽トピックの文書 だということがわかる。
  • 53.
    © 2016 YosukeKatada 無断転載禁止 まとめると、 LDAで想定している文書の生成プロセスは・・・ サッカー 日本代表 試合 音楽 最高 トピック: サッカー トピック 音楽 トピック K・・・ サッカー トピック サッカー トピック 音楽 トピック K・・・ 音楽 STEP1: まずトピックの箱を確率的に選ぶ STEP2: STEP1で選んだトピックの箱から単語カードを 1 枚確率的に選ぶ
  • 54.
    © 2016 YosukeKatada 無断転載禁止 実際に人間が見えるのは文書データのみ サッカー 日本代表 試合 音楽 最高 トピック1: ? トピック2 ? トピック K ? ・・・ ? トピック 1 ? トピック 2 ? トピック 3 ? ・・・ ? STEP1: まずトピックの箱を確率的に選ぶ STEP2: STEP1で選んだトピックの箱から単語カードを 1 枚確率的に選ぶ 人間の目に見えているのは、ここだけ この部分は人間にはわ からないので、 ここを推定したい LDAの目的は、今手元にある文書データAの背景にある生成過程を推定し、その結果と して文書データAのトピック(今ならサッカートピック)を知ること
  • 55.
    © 2016 YosukeKatada 無断転載禁止 繰り返しになりますが • 人間が目に見えるのは(生成された)文書デー タのみ • 文書生成プロセスを仮定して、目に見えている 文書データから、各「トピックの箱」からどんな単 語カードが出やすいのかを推定しよう、と言うの がコンセプト つまり、LDAのインプットは文書 x 単語の行列(要素は出現 回数)のみ。それだけで、生成プロセスを推定しようと言うの がコンセプト
  • 56.
    © 2016 YosukeKatada 無断転載禁止 LDAを使う上で人間が与える ハイパーパラメーター • トピック数: K • トピックの箱を選ぶ確率をコントロールするハイパーパラ メータ: α • 単語カードが引かれる確率をコントロールするハイパーパラ メーター: β K, α, βによって結果が異なるが、イメージしにくいの はαとβなので、次ページでもう少し詳しく説明しま す。
  • 57.
    © 2016 YosukeKatada 無断転載禁止 αとβはディリクレ分布のパラメーター ディリクレ分布とは、複数クラスがあるうち、各クラ スの目の出やすさを表現する確率分布 例: 今サイコロがあり、ディリクレ分布よりどの面の出やすさ(確 率)をサンプリングする。 1 2 3 4 5 6 0.00 0.99 0.00 0.00 0.00 0.01 0.00 0.00 0.01 0.27 0.72 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.51 0.49 1 2 3 4 5 6 0.13 0.14 0.21 0.26 0.16 0.10 0.15 0.13 0.25 0.19 0.18 0.10 0.12 0.20 0.19 0.09 0.26 0.14 0.24 0.10 0.17 0.13 0.12 0.23 alpha = [0.1, 0,1, 0.1 … 0.1] alpha = [10.0, 10.0, 10.0... . 10.0]
  • 58.
    © 2016 YosukeKatada 無断転載禁止 精度の評価 • (テストデータを用いた)対数尤度 – 0に近いほど良い • Peplexity – 小さいほど良いモデル • Perplexityと人間の解釈しやすさはあまり関係ないという研究もある https://www.umiacs.umd.edu/~jbg/docs/nips2009-rtl.pdf Perplexity = 単語の数 対数尤度 exp -
  • 59.
    copyright 2016 YosukeKatada レコメンデーション © 2016 Yosuke Katada 59
  • 60.
    copyright 2016 YosukeKatada こんな画面見たことないですか? 60
  • 61.
    copyright 2016 YosukeKatada レコメンデーションはビジネスでも重要 61 レコメンデーションはキャッシュポイントに近いため、機械学習の 適用先として重要な技術の一つとなっています。 McKinsey&Company調査(2012年)によると、ECやコンテンツ消 費におけるレコメンドの対売上影響は少なくありません。 ● アマゾンは全売り上げの35%がレコメンド経由 ● Netflixはコンテンツ消費の75%がレコメンド経由 ● Google Newsはレコメンドによりクリック数が38%増加 ● Choicestreamの顧客のうち28%が気に入ったレコメンド商品 を追加購入 (出処:http://www.slideshare.net/xamat/recommender-systems-machine-learning-summer-school-2014-cmu p.13)
  • 62.
    copyright 2016 YosukeKatada レコメンデーションの種類 62 一口にレコメンデーションと言っても色々あります。 協調フィルタリング -User × User -Item × Item ・コンテンツベース レコメンデーション -コンテンツマッチ -分類機を用いた手法 ・コンテキスト アウェア レコメンデーション -Tensor Factorization
  • 63.
    copyright 2016 YosukeKatada レコメンデーションの種類 63 一口にレコメンデーションと言っても色々あります。 協調フィルタリング -User × User -Item × Item ・コンテンツベース レコメンデーション -コンテンツマッチ -分類機を用いた手法 ・コンテキスト アウェア レコメンデーション -Tensor Factorization
  • 64.
    copyright 2016 YosukeKatada 協調フィルタリングのプロセス 協調フィルタリングのステップは 1. 類似度計算のステップ 2. 予測のステップ で構成されます。 64 user ID item ID user x itemの 行列 類似度の高いユーザー もしくは 類似度の高い商品 おすすめする商品 類似度計算のステップ 予測のステップ
  • 65.
    copyright 2016 YosukeKatada 協調フィルタリングのプロセス 協調フィルタリングのステップは 1. 類似度計算のステップ 2. 予測のステップ で構成されます。 65 user ID item ID user x itemの 行列 類似度の高いユーザー もしくは 類似度の高い商品 おすすめする商品 類似度計算のステップ 予測のステップ
  • 66.
    copyright 2016 YosukeKatada 類似度計算のステップ 66 まず、こんな行列が用意できていることを想定します。 A432 I4321 D4381 K4521 E4103 O3109 V1923 S4333 101 2 5 1 1 0 1 2 4 102 1 5 2 1 4 0 0 3 103 0 3 3 0 1 1 1 1 104 5 2 2 3 1 0 0 4 105 5 3 3 4 1 0 0 5 106 1 4 3 2 5 1 0 1 107 0 0 0 0 0 0 0 2 108 0 4 0 0 0 0 0 0 user ID item ID
  • 67.
    copyright 2016 YosukeKatada A432 I4321 D4381 K4521 E4103 O3109 V1923 S4333 101 2 5 1 1 0 1 2 4 102 1 5 2 1 4 0 0 3 103 0 3 3 0 1 1 1 1 104 5 2 2 3 1 0 0 4 105 5 3 3 4 1 0 0 5 106 1 4 3 2 5 1 0 1 107 0 0 0 0 0 0 0 2 108 0 4 0 0 0 0 0 0 User x Userで類似度を計算 67 user item この2つの ベクトルの 類似度を測る ● 好みの似ているユーザーは購入する商品やレーティングも似 ていると仮定して類似度の高いユーザーを調べる
  • 68.
    copyright 2016 YosukeKatada A432 I4321 D4381 K4521 E4103 O3109 V1923 S4333 101 2 5 1 1 0 1 2 4 102 1 5 2 1 4 0 0 3 103 0 3 3 0 1 1 1 1 104 5 2 2 3 1 0 0 4 105 5 3 3 4 1 0 0 5 106 1 4 3 2 5 1 0 1 107 0 0 0 0 0 0 0 2 108 0 4 0 0 0 0 0 0 Item x Itemで類似度を計算 68 user item ● 今度は、併せ買いされる商品はユーザーの購入パターン も似ていると想定する。 この2つの ベクトルの 類似度を測る
  • 69.
    copyright 2016 YosukeKatada コサイン類似度 69 • コサイン類似度はベクトルの角度を測る方法 • ベクトルのなす角度によって類似度を測定 cos90度 = 0 cos30度 = 0.8
  • 70.
    copyright 2016 YosukeKatada 協調フィルタリングのプロセス 協調フィルタリングのステップは 1. 類似度計算のステップ 2. 予測のステップ で構成されます。 70 user ID item ID user x itemの 行列 類似度の高いユーザー もしくは 類似度の高い商品 おすすめする商品 類似度計算のステップ 予測のステップ
  • 71.
    copyright 2016 YosukeKatada 予測のステップ 1つのやり方として類似度とレーティングの加重平均が大きい ものを優先して掲出する方法があります。 71 類似度 A432 類似度 x A432 I4321 類似度 x I4321 D4381 類似度 x D4381 101 0.98 2 1.96 5 4.9 1 0.98 102 0.92 1 0.92 5 4.6 2 1.84 103 0.88 3 2.64 3 2.64 104 0.76 5 3.8 2 1.52 2 1.52 106 0.65 1 0.65 4 2.6 3 1.95 類似度 x レーティング 7.33 16.26 8.93 類似度の合計 3.31 4.19 4.19 平均類似度 2.21 3.88 2.13 ①類似度 x レーティングを計算して、その合計を出します。②類似度の合計を出します。 ③類似度 xレーティングの合計/類似度の合計を計算します。
  • 72.
    copyright 2016 YosukeKatada Pythonでちょっとやってみましょう レコメンデーション.ipynbを開いてみましょう。 72
  • 73.
    copyright 2016 YosukeKatada 新規ユーザーや新商品はどうする? • 新規ユーザーや新商品はフィードバックが少ないため、協 調フィルタリングが有効に作用しにくい • これをコールドスタート問題と言います。 73 A432 I4321 D4381 K4521 E4103 O3109 V1923 S4333 101 2 5 1 1 0 1 2 4 102 1 5 2 1 4 0 0 3 103 0 3 3 0 1 1 1 1 104 5 2 2 3 1 0 0 4 105 5 3 3 4 1 0 0 5 106 1 4 3 2 5 1 0 1 107 0 0 0 0 0 0 0 2 108 0 4 0 0 0 0 0 0 あまり フィードバックがな い・・・
  • 74.
    copyright 2016 YosukeKatada コールドスタート問題の解決方法 • 売上ランキング上位のものを出す? • コンテンツベースのレコメンデーションで推薦す る? • もうフィードバックをもらえそうなユーザーに聞い ちゃう? – https://research.yahoo.com/mobstor/publication_attachments/exUseM e_RecSys2015_CameraReady.pdf • 次元削減手法を使って見る – Netflix Prizeでも成果を上げた方法 • https://datajobs.com/data-science-repo/Recommender-Systems-[ Netflix].pdf 74
  • 75.
    copyright 2016 YosukeKatada 次元削減の手法 user x itemの行列を • user x 潜在変数(次元数はitem数より少ない) • 潜在変数 x item の行列に分解する <主な次元削減手法> • 特異値分解 • 非負値行列分解 • 主成分分析 75
  • 76.
    © 2016 yosukekatada 無断転載・複製・利用を禁ず 特異値分解のざっくりした説明 • 長方形行列の行列分解できるようにしたものが 特異値分解 76 A = UΣV = T u1 u2 ・・・ σ σ ・・・ 0 0 1 2 v1 v2 ・・・ T 0 0 0
  • 77.
    © 2016 yosukekatada 無断転載・複製・利用を禁ず 特異値分解の使いみち 機械学習の分野では次元圧縮の一種 77 ユーザー (user_id) 商品 (title_id) U ユーザー (user_id) 潜在因子 Σ V A レコメンデーションやクラスタリングなど、ユーザー x 商品の行列を作ることがある。 その場合、商品(title_id)は数千から数十万アイテムになることが多く、このような高次元なデータを より低い次元のデータに圧縮したい時がある。 その時に威力を発揮するのが、特異値分解である
  • 78.
    非負値行列分解 78 • 分解した後の行列の要素がすべて正になるよう にしたものが非負行列分解 • 自分で何次元に圧縮するかを決める •二乗誤差が小さくなるよう分解される 78 X = UV = u1 u2 ・・・ v1 v2 ・・・ T T 列の数(次元数)は自分で決める
  • 79.
    レコメンデーションにおける 非負値行列分解 79 ユーザー (user_id) 商品 (title_id) U ユーザー (user_id) V A 商品 (title_id) レコメンデーションでは、ユーザー x 商品の行列を •「ユーザー」と「潜在変数」の ユーザーの 潜在変数 商品の潜在変数 ユーザー×商品の行列のような非負行列の分解では、 非負値行列分解の方が解釈しやすい
  • 80.
    copyright 2016 YosukeKatada コンテンツベース 80 一口にレコメンデーションと言っても色々あります。 協調フィルタリング -User × User -Item × Item ・コンテンツベース レコメンデーション -コンテンツマッチ -分類機を用いた手法 ・コンテキスト アウェア レコメンデーション -Tensor Factorization
  • 81.
    copyright 2016 YosukeKatada コンテンツマッチ 81 単語に分解 TF-IDFによる 重み付け 類似度の計算 記事タイトル 記事本文 商品タイトル 商品説明文 記 事 商 品 単語A: 17 単語B: 14 単語C: 5 単語D: 5 ・ ・ ・ 単語A: 5 単語E: 1 単語F: 1 単語G: 1 単語H: 1 ・ ・ ・ 単語A: 1.11 単語B: 0.65 単語C: 0.36 単語D: 0.17 ・ ・ ・ 単語A: 3.17 単語E: 0.27 単語F: 0.45 単語G: 0.78 単語H: 0.61 ・ ・ ・ 類似度 (コサイン類似度) 0.661637 記事タイトル・本文と商品タイトル・本文を単語に分解し、固有名詞のみを抽出する。そ の後、特徴的な単語に重みがつくように重みづけを行い、類似度を計算する。これを記 事 x 商品の組み合わせで計算を行い、各記事において上位N件の商品を掲出する。 テキスト テキスト テキスト テキスト
  • 82.
    copyright 2016 YosukeKatada 分類器を用いた方法 82 クリック 商品変数1 商品変数2 ・・・ カテゴリ タグ tree1 ・・・ tree100 記事タグ x 商品変数1 ・・・ 0 AA A, N A 経済 日本経済 3 5 経済_AA 日本経済_AA 1 AB B, I A 経済 日本経済 6 4 経済_AB 日本経済_AB 0 AE K, I, S A 経済 日本経済 3 9 経済_AE 日本経済_AE 0 AR L, O, J A 経済 日本経済 2 4 経済_AR 日本経済_AR 商品関連のタグ 記事関連のタグ タグ化された 定量データ 商品関連タグ x 記事関連タグ インプット アウト プット 予測 クリックの有無をターゲットの変数にして、商品・記事の特徴量の組 み合わせからクリックされるかどうかを予測する方法
  • 83.
    copyright 2016 YosukeKatada 最後に少しだけ 83 一口にレコメンデーションと言っても色々あります。 協調フィルタリング -User × User -Item × Item ・コンテンツベース レコメンデーション -コンテンツマッチ -分類機を用いた手法 ・コンテキスト アウェア レコメンデーション -テンソル分解
  • 84.
    copyright 2016 YosukeKatada テンソル分解 84 1. ユーザーを商品とコンテキストの3次元テンソルを作成 2. テンソル分解により3次元テンソルを2次元行列に分解 3. 得られたユーザー x 潜在因子の行列Aをクラスタリングし、そのユーザー属 性を読み取ることで、クラスターを理解する ユーザー (user_id) 商品 コンテキスト (例:平日・休日の時間帯別) A ユーザー 潜在因子 B 商品Cコンテキスト 3次元テンソル 要素は時間割合 コア テンソル
  • 85.
    copyright 2016 YosukeKatada ご清聴ありがとうございました! 良いお年を! 85