『仕事ではじめる機械学習』の読書メモ

IT
スポンサーリンク

仕事ではじめる機械学習』を読んだので、学んだ知識を書き連ねようと思います。

スポンサーリンク
  1. 機械学習はどのように使われるか
  2. 教師あり学習(Supervised Learning)
  3. モデル
  4. 特徴量(Feature)
  5. クラス(Class)
  6. 前処理
  7. 機械学習プロジェクトに特有の気を付けるべき点
  8. 過学習(Overfitting)
  9. 過学習を防ぐ方法
    1. 交差検証を使ってパラメータチューニングをする
    2. 正則化を行う
    3. 学習曲線を見る
  10. Data Leakage
  11. 機械学習の種類
  12. 分類(Classification)
    1. 分類のアルゴリズム
  13. パーセプトロン(Perceptron)
    1. パーセプトロンの特徴
  14. ロジスティック回帰(Logistic Regression)
    1. ロジスティック回帰の特徴
  15. SVM(Support Vector Machine)
    1. SVMの特徴
    2. SVMのヒンジ損失
    3. SVMのマージン最大化
    4. SVMのカーネル
  16. ニューラルネットワーク(Neural Network)
    1. ニューラルネットワークの特徴
    2. フィードフォワード型ニューラルネットワーク
    3. 誤差逆伝播法(Backpropatation)
  17. k-NN(k近傍法、k-Nearest Neighbor Method)
    1. k-NNの特徴
    2. k-NNの距離計算
  18. 決定木(Decision Tree)
    1. 決定木の特徴
    2. 決定木の過学習を抑える方法
    3. 決定木の仕組み
  19. ランダムフォレスト(Random Forest)
    1. ランダムフォレストの特徴
  20. GBDT(Gradient Boosted Decision Tree)
    1. GBDTの特徴
  21. 回帰(Regression)
    1. 回帰のアルゴリズム
  22. 線形回帰(Linear Regression)
  23. クラスタリング(Clustering)
  24. 次元削減(Dimension Reduction)
  25. 推薦(Recommendation)
  26. 異常検知(Anomaly Detection)、外れ値検知(Outlier Detection)
  27. 頻出パターンマイニング(Frequent Pattern Mining)
  28. 強化学習(Reinforcement Learning)
  29. 各アルゴリズムに共通する概念
    1. オンライン学習(Online Learning)
    2. バッチ学習(Batch Learning)
    3. 線形分離可能(Linearly Separable)
    4. 損失関数(Loss Function)、誤差関数(Error Function)
    5. ヒンジ損失(Hinge Loss)
    6. 交差エントロピー誤差関数(Cross-entropy Error Function)
    7. 目的関数(Objective Function)、評価関数
    8. 確率的勾配降下法(Stocastic Gradient Descent、SGD)
    9. 学習率(Learning Rate)
    10. 活性化関数(Activation Function)
    11. ステップ関数(Step Function)
    12. シグモイド関数(Sigmoid Function)
    13. 正則化項(Regularization Term)、罰則項(Penalty Term)
    14. アンサンブル学習(Ensemble Learning)
  30. 分類の評価
    1. 分類の評価指標
    2. 混同行列(Confusion Matrix)
    3. マイクロ平均(Micro-average)
    4. マクロ平均(Macro-average)
    5. 他の評価指標
  31. 回帰の評価
    1. 回帰の評価指標
  32. バッチ学習
  33. オンライン学習
  34. ミニバッチ学習
  35. 公開データセット
  36. 公開モデル
  37. オフラインで検証しにくいポイント
  38. 仮説検定(Hipothesis Testing)
  39. 仮説検定の注意点
  40. 因果推論
  41. 推薦アルゴリズム
  42. ユーザー間型協調フィルタリング
    1. 類似度の種類
    2. ピアソンの相関係数
    3. コサイン類似度
    4. ジャッカード係数
    5. 実装例
  43. アイテム間型協調フィルタリング
    1. 調整済みコサイン類似度
  44. ユーザー間型とアイテム間型の使い分け
  45. モデルベース協調フィルタリング
    1. モデルの種類
    2. クラスタリング
    3. 回帰
    4. トピックモデル
    5. 次元削減の種類
    6. 行列分解
    7. Matrix Factorization
  46. 内容ベースフィルタリング
  47. 協調フィルタリングと内容ベースフィルタリングの使い分け
  48. Factorization Machines
  49. Uplift Modeling
  50. 参考
    1. KPIの決め方、目的と課題の考え方・整理の仕方
    2. 仮説の立て方と検証方法
    3. 学習曲線の詳細
    4. 機械学習プロダクト開発の進め方の参考
    5. どのアルゴリズムを選ぶべきか
    6. 多クラス分類の説明
    7. 交差エントロピー誤差関数
    8. 因果推論
    9. 適切な標本サイズの決定

機械学習はどのように使われるか

未知のデータに対して、過去のデータを元に予測をする。(よくある使われ方)
このような予測には、「教師あり学習」というアプローチがよく使われる。

スポンサーリンク

教師あり学習(Supervised Learning)

既知のデータと、何かしらのアルゴリズムを使う。

既知のデータを、下記に分ける。

  • 入力データ(画像のRGBなど)
  • 出力データ(猫・犬といったカテゴリなど)

これらをアルゴリズムに渡すことで、入力データと出力データの関係性を作り上げる。
この関係性が「モデル」と呼ばれる。

教師あり学習には、2つのフェーズがある。

  • 学習フェーズ:既知の入力データと出力データから、関係性(モデル)を作り上げる
  • 予測フェーズ:未知の入力データから、モデルを通じて出力データを予測する

モデル

入力データと出力データの関係性のこと。

下記で構成される。

  • どのアルゴリズムを使うか
  • データから獲得されたパラメータ

特徴量(Feature)

機械学習の予測モデルに入力するデータ。

入力データそれぞれを数値化してリスト化したものを、「特徴ベクトル」と呼ぶ。

特徴量の種類の一つとして、「カテゴリカル変数(Categorical Variable)」がある。
晴れ・曇りといった分類を数値化したもの。
数値化したデータを「ダミー変数(Dummy Variable)」と呼ぶ。

どんな特徴量が有効そうかの推測に、ドメイン知識は重要。

クラス(Class)

機械学習での分類対象のカテゴリのこと。

前処理

データを機械学習に使える形にするプロセス。

  • テキスト形式⇒表形式
  • 欠損値・異常値の処理
  • 正規化
  • 単語分割→頻度カウント→低頻度・高頻度な単語の除外
  • カテゴリ変数のダミー変数化

機械学習プロジェクトに特有の気を付けるべき点

  • 通常のシステムより技術的負債が発生しやすいことを意識する
  • 定期的な予測モデルの更新、特徴量の再検討(世間的に「ヤバイ」の意味合いが変わる)
  • 予測性能のモニタリングをできるようにする
  • 予想だにしない予測結果に対して、後から介入できる仕組み(人をゴリラと誤認識)
  • まずはライトに「MVP(Minimum Viable Product)」を作って、コンセプトの筋が良いか悪いかを判断。PoCをやる
  • 予測モデルの性能改善に際限がなくなることを防ぐため、目標性能と撤退ラインを決める
  • はじめての予測モデルで99.9%など高い予測性能が出た場合、過学習やData Leakageを疑う

過学習(Overfitting)

学習時のデータに対して過剰に適合して、未知のデータに対しての予測が適切でなくなること。
「汎化(Generalization)性能」が低いとも言える。

言い換えると、同じようなデータに慣れすぎてしまって、他のデータに応用が効かなくなること。

過学習を防ぐ方法

  1. 交差検証(Cross Validation)を使ってパラメータチューニングをする
  2. 正則化(Regularization)を行う
  3. 学習曲線(Learning Curve)を見る

交差検証を使ってパラメータチューニングをする

「データ」を「テストデータ(Test Data)」「開発データ(Development Data)」に分ける。
「テストデータ」は、最終的にできあがるモデルの性能を評価するためのデータ。
「開発データ」は、モデルを作るためのデータ。

「開発データ」を「訓練データ(Training Data)」「検証データ(Validation Data)」に分ける。
「訓練データ」は、ハイパーパラメータ(Hiper-parameter)を指定して一旦のモデルを作るためのデータ。
「検証データ」は、「訓練データ」によりできあがるモデルの性能を評価するためのデータ。

交差検証は、「訓練データ」と「検証データ」の分け方のパターンをいくつも用意して、平均的な性能がよいモデルができあがるハイパーパラメータを探すこと。「モデル選択」とも言うっぽい。

正則化を行う

少しくらい分類が外れてもいいので、未知のデータに対する適応力を付ける方法。

学習曲線を見る

データサイズや学習の繰り返し回数に対して、予測精度の推移をグラフに書いたもの。

Data Leakage

学習時に、本来知りえない正解データの情報が紛れて、モデルの予測精度が不当に高くなってしまうこと。

例えば、未来の予測をするモデルを作るために、未来のデータを含めて学習してしまったときなどに起きる。

機械学習の種類

  • 分類:離散値(クラス)の予測
  • 回帰:連続値の予測
  • クラスタリング:データをグルーピング
  • 次元削減:高次元のデータを低次元にマッピング
  • 推薦:ユーザーが好きそうなアイテムや、閲覧しているアイテムと似ているアイテムを提示
  • 異常検知:普段とは違う挙動の検知
  • 頻出パターンマイニング:高頻度で出現するパターンの抽出
  • 強化学習:局所的には正解が不明確な状況で、とるべき行動の方針を学習

分類(Classification)

離散値(クラス)の予測をすること。

分類のアルゴリズム

  • パーセプトロン
  • ロジスティック回帰
  • SVM
  • ニューラルネットワーク
  • k-NN
  • 決定木
  • ランダムフォレスト
  • GBDT

パーセプトロン・ロジスティック回帰・SVM・ニューラルネットワークは、分類の境界となる面を学習する。
面は「決定境界(Dicision Boundary)」と呼ばれ、数式で表現される。

k-NNは、既知のデータから距離が近いデータかどうかを判断する。

決定木・ランダムフォレスト・GBDTは、木構造のルールの集合を学習する。

パーセプトロン(Perceptron)

「入力ベクトル」と「重みベクトル」を掛け合わせて足したものが、0以上/未満かでクラスを分類するアルゴリズム。
「重みベクトル」は、学習の結果できあがるもの。

パーセプトロンの特徴

  • オンライン学習
  • 予測性能はそこそこ
  • 学習は速い
  • 過学習を抑える仕組みがない
  • 線形分離可能な問題のみ
  • 活性化関数が、ステップ関数
  • 損失関数に、ヒンジ損失を使う

ロジスティック回帰(Logistic Regression)

パーセプトロンと似ている。
パラメータ数が少なくシンプルで、予測に時間がかからないため、ベースラインとしてよく使われるアルゴリズム。

ロジスティック回帰の特徴

  • クラスに所属する確率値が出せる
  • オンライン学習・バッチ学習
  • 予測性能はまずまず
  • 学習は速い
  • 過学習を防ぐための正則化項が加わっている
  • 線形分離可能な問題のみ
  • 活性化関数が、シグモイド関数
  • 損失関数が、交差エントロピー誤差関数

SVM(Support Vector Machine)

分類問題で非常によく利用されるアルゴリズム。

SVMの特徴

  • オンライン学習・バッチ学習
  • 学習は速い
  • マージン最大化により、なめらかな超平面を学習し、過学習を防ぐ
  • カーネルにより、線形分離不可能な問題にも対応
  • 線形カーネルなら、次元数の多い疎なデータも学習可能
  • 損失関数に、ヒンジ損失を使う

SVMのヒンジ損失

パーセプトロンとは横軸との交点が違う。
これにより、決定境界ギリギリで正解しているデータにも弱い損失を与えて、決定境界にマージンを持たせることが出来る。

SVMのマージン最大化

「超平面」と「各クラスの最も近いデータ(サポートベクター)」までの距離が最大化できるような、超平面の引き方を決めること。
これにより、既知のデータに対してあそびが生まれ、余裕のある決定境界にすることができ、過学習を抑えられる。

SVMのカーネル

特徴量を疑似的に追加して、データを高次元に変換することで、高次元上で線形分離可能にする方法。

カーネルの主な種類は下記のとおり。

  • 線形カーネル(Linear Kernel)
  • 多項式カーネル(Polynomial Kernel)
  • RBFカーネル(Radial Basis Function Kernel、動的基底関数カーネル)

線形カーネルは、線形分離可能な問題にのみ対応。
処理が速いため、主にテキストなどの高次元&疎なベクトルデータに使うことが多い。

RBFカーネルは、線形分離不可能な問題にも対応。
主に画像や音声信号などの密なベクトルデータに使うことが多い。

ニューラルネットワーク(Neural Network)

多層パーセプトロンとも呼ばれる。

ニューラルネットワークの特徴

  • クラスに所属する確率値が出せる
  • 学習に時間がかかる
  • パラメータの数が多いので、過学習しやすい
  • 線形分離不可能な問題にも対応
  • 重みの初期値に依存して、局所最適解にはまりやすい

フィードフォワード型ニューラルネットワーク

  • ニューラルネットワークの基本的な型。
  • 入力層、中間層、出力層という3階層。
  • 出力層に、分類したいクラスだけノードを用意。
  • 出力層の結果を、softmax関数により正規化することで、各クラスに所属する確率値とみなすことが多い。
  • 活性化関数には、ReLU(Rectified Linear Unit)が使われることが多い。

誤差逆伝播法(Backpropatation)

出力値の誤差を、ネットワークの逆方向に計算して重みを修正する方法。
重みの修正量や、ループ回数により、学習を打ち切る。

k-NN(k近傍法、k-Nearest Neighbor Method)

あるデータについて、近くのk個の既知データが所属するクラスの多数決で、分類をする方法。

k-NNの特徴

  • オンライン学習
  • 予測性能はそこそこ。kの数にもよる
  • 予測に時間がかかる。全データとの距離計算が必要なため
  • 線形分離不可能な問題にも対応
  • 特徴量間のスケールを揃えるため、正規化は必須
  • kが大きいほど、超平面は滑らかになり、過学習を抑えやすい

k-NNの距離計算

  • ユークリッド距離(Euclidean Distance):2点間の距離
  • マハラノビス距離(Mahalanobis Distance):クラスのデータ群の平均からの近さと、データの分散を考慮

決定木(Decision Tree)

学習結果としてIF-THENルールができあがる。

決定木の特徴

  • バッチ学習
  • 予測性能はまずまず
  • 木が深くなったり、特徴量の種類が多い場合、学習に使えるデータ数が少なくなるため、過学習しやすい傾向
  • 線形分離不可能な問題に対応
  • 線形分離可能な問題は不得意
  • クラスごとのデータ数に偏りのあるデータは不得意
  • データの小さな変化に対して結果が大きく変わりやすい
  • カテゴリ変数やその欠損値などを入力しても内部で処理してくれる
  • 入力データの正規化がいらない
  • 学習したモデルがIF-THENルールのため、人間が見て解釈しやすい

決定木の過学習を抑える方法

  • 木の深さを少なくする
  • 枝刈り(剪定、Pruning)をする
  • 次元削減や特徴量選択により、特徴量の種類を減らす

決定木の仕組み

不純度(Impurity)を基準として、同じクラスがまとまるように条件分岐を学習する。

不純度には、下記のような種類がある。

  • 情報ゲイン(Information Gain)
  • ジニ係数(Gini Coefficient)

ランダムフォレスト(Random Forest)

  • 決定木の派生形。
  • 特徴量の組み合わせをいくつか用意して、性能がよかった複数の予測結果を多数決で統合する。
  • 並列での学習が可能。

ランダムフォレストの特徴

  • アンサンブル学習
  • 予測性能は決定木より高い
  • 過学習しやすい傾向
  • 主なパラメータが2つのため、チューニングが比較的簡単

GBDT(Gradient Boosted Decision Tree)

  • 決定木の派生形。
  • サンプリングデータに対して、直列的に浅い木を学習する。
  • 予測値と実際の値のズレを目的変数として考慮することで、弱点を補強するような動き。

GBDTの特徴

  • アンサンブル学習
  • 予測性能はランダムフォレストより高い
  • 直列で学習するため時間がかかる
  • XGBoostやLightGBMなどのライブラリで、学習の高速化が可能
  • パラメータが多いため、チューニングにコストがかかる

回帰(Regression)

連続値の予測をすること。

回帰のアルゴリズム

  • 線形回帰(Linear Regression)、多項式回帰(Polynomial Regression)
  • Lasso回帰(ラッソ回帰、Lasso Regression)、Ridge回帰(リッジ回帰、Ridgeregression)、Elastic Net
  • 回帰木(Regression Tree)
  • SVR(Support Vector Regression)

線形回帰は、データを直線で近似
多項式回帰は、データを曲線で近似

Ridge回帰は、L2正則化項を線形回帰に追加したもの
Lasso回帰は、L1正則化項を線形回帰に追加したもの。L1正則化によりいくつかの重みが0になり、特徴を絞り込む性質
Elastic Netは、L2・L1正則化項の両方を線形回帰に追加したもの。L1正則化によりいくつかの重みが0になり、特徴を絞り込む性質

回帰木は、決定木ベースの回帰で、非線形なデータに対応

SVRは、SVMベースの回帰で、非線形なデータに対応

線形回帰(Linear Regression)

  • 「入力ベクトル」と「重みベクトル」を掛け合わせて足したものを出力。
  • 「重みベクトル」は、学習の結果できあがるもの。
  • 損失関数には、二乗誤差を使う。

クラスタリング(Clustering)

データをグルーピングすること。

教師なし学習の一つ。
主にデータの傾向をつかむために使われる。

手法としては、下記のような種類がある。

  • 階層的クラスタリング(Hierarchical Clustering):似ている組み合わせを順番にまとめていく
  • k-means:距離の近いもの同士をk個のグループに分割していく

次元削減(Dimension Reduction)

高次元のデータを低次元のデータにマッピングすること。

下記のような用途で使われることが多い。

  • 高次元のデータを2次元に可視化して、データの特徴を見てみる
  • 疎なデータから、密なデータに変換

手法としては、下記のような種類がある。

  • 主成分分析(PCA、Principal Component Analysis)
  • t-SNE

推薦(Recommendation)

ユーザーが好きそうなアイテムや、閲覧しているアイテムと似ているアイテムを提示すること。

下記のような用途で使われることが多い。

  • この商品を買った人はこれも買っています
  • このアーティストに関連するアーティスト

異常検知(Anomaly Detection)、外れ値検知(Outlier Detection)

普段とは違う挙動を検知すること。

下記のような用途で使われることが多い。

  • クレジットカードの不正決済
  • DoS攻撃による不正検知

異常データは、正常データに比べて極端に少ないため、「不均衡データ(Imbalanced Data)」。
データに極端な偏りがあるため、教師なし学習が使われることが多い。
手法の一つとしては、「One Cless SVM」がある。

頻出パターンマイニング(Frequent Pattern Mining)

高頻度で出現するパターンの抽出をすること。

「ビールと紙おむつがよく買われる」が一例。

手法としては、下記のようなものがある。

  • 相関ルール(Association Rule):SPMFなどのツールで試すことが出来る
  • ARIMA(自己回帰移動平均モデル):時系列の分析

強化学習(Reinforcement Learning)

経験をもとに、ある目的のために最適な行動の方針を獲得すること。

よく使われる例。

  • 自動運転
  • ゲームAI(囲碁、将棋なども含む)

各アルゴリズムに共通する概念

オンライン学習(Online Learning)

データを1つずつ入力して最適化。

バッチ学習(Batch Learning)

データを全て入力して最適化。

線形分離可能(Linearly Separable)

データを直線で分類できること。
直線は、多次元の場合は「超平面(hyperplane)」と呼ぶ。

損失関数(Loss Function)、誤差関数(Error Function)

予測値と本来の値が、どれだけずれているか、を表す関数。
いま学習している予測モデルが、どれくらい良いものなのかを測るもの。

ヒンジ損失(Hinge Loss)

不正解のとき損失が大きくなり、正解のとき損失が0になる。

交差エントロピー誤差関数(Cross-entropy Error Function)

目的関数(Objective Function)、評価関数

損失関数の一般化。
どれくらいモデルがデータに合っているのかを表す。
「損失関数の全データでの和」に対して、正則化項を足したりする。

確率的勾配降下法(Stocastic Gradient Descent、SGD)

適切なパラメータを探っていく方法の一つ。
パラメータを修正していって、目的関数の谷となるパラメータを見つける。
パラメータの修正幅は、「学習率」×「山の傾き」。

学習率(Learning Rate)

どれくらいの幅でパラメータを修正するかを決める、ハイパーパラメータの一つ。

活性化関数(Activation Function)

予測値を、非線形変換した値にするための関数。

ステップ関数(Step Function)

活性化関数の一つ。
入力値を「+1/-1」や「1/0」にする。

シグモイド関数(Sigmoid Function)

入力が0のとき0.5、値が小さくなるほど0に、大きくなるほど1に近づく関数。
出力値がクラスに属する確率となり、0.5以上かどうかでクラスに分類されるか否かを判断。
0.5はハイパーパラメータとして調整することもある。

正則化項(Regularization Term)、罰則項(Penalty Term)

パラメータ探索時に正則化項を加えることで、既知のデータの影響を受けすぎないようにする。
正則化項には種類があり、どの正則化項を使うかによって、L1正則化、L2正則化と呼び方が変わる。

アンサンブル学習(Ensemble Learning)

複数の学習結果を組み合わせる手法。

分類の評価

分類の評価指標

  • 正解率(Accuracy):データの正解・不正解の割合によって意味合いが変わるので要注意。
  • 適合率(Precision):正確に予測をしたい場合に重視する指標。
  • 再現率(Recall):抜け漏れを少なくしたい場合に重視する指標。
  • F値(F-measure):適合率と再現率の調和平均。

混同行列(Confusion Matrix)

  • 真陽性(TP、True Positive):予測「Positive」に対して、実際も「Positive」なので「True」
  • 偽陽性(FP、False Positive):予測「Positive」に対して、実際は「Negative」なので「False」
  • 偽陰性(FN、False Negative):予測「Negative」に対して、実際は「Positive」なので「False」
  • 真陰性(TN、True Negative):予測「Negative」に対して、実際も「Negative」なので「True」

2文字目は、予測結果がどうか。(Positive/Negative)
1文字目は、予測と実際が合ってるかどうか。(予測 == 実際)

マイクロ平均(Micro-average)

多クラス分類の評価。
クラスをまたいだ全体の評価に向いている。

マクロ平均(Macro-average)

多クラス分類の評価。
クラスごとにデータ数に偏りがある場合の評価に向いている。

他の評価指標

  • ROC曲線(Receiver Operating Characteristic Curve)
  • AUC(Area Under the Curve)

回帰の評価

回帰の評価指標

  • 平均絶対誤差(Root Absolute Error、MAE)
  • 平均二乗誤差(Root Mean Squared Error、RMSE):MAEに比べて外れ値に弱いと言われている
  • 決定係数(Coefficient of Determination)

バッチ学習

全データを用いて、最適な重みを計算。

オンライン学習

1つのデータを用いて、都度重みを計算。

ミニバッチ学習

サンプリングデータを用いて、最適な重みを計算。
確率的勾配法で使われる。
深層学習では主流。

公開データセット

  • UCI Machine Learning Repository:http://archive.ics.uci.edu/ml/
  • Kaggle:https://www.kaggle.com/
  • ImageNet(タグ付き画像):http://www.image-net.org/
  • ハッカドール(Wikipediaの形態素解析の辞書):http://www.slideshare.net/mosa_siru/ss-40136577

公開モデル

  • Model Zoo:https://github.com/BVLC/caffe/wiki/Model-Zoo
  • TensorFlow(物体認識用):https://research.googleblog.com/2017/06/supercharge-your-computer-vision-models.html

オフラインで検証しにくいポイント

  • 最終的な利益貢献
  • 機械学習モデルで影響を受けたユーザーの、行動変更による影響

仮説検定(Hipothesis Testing)

母集団に有意な差があることを、標本を使って確認する手法。
p値という判断基準が得られることで、機械的に有意な仮説を抽出できることがメリット。

  • 帰無仮説(Null Hypothesis):とりあえず立てる仮説。棄却されることで、対立仮説を結論とするような使い方。
  • 対立仮説(Alternative Hypothesis):帰無仮説が棄却されたときに採択される仮説。
  • p値(p-value):帰無仮説が真であるとした時の確率。
  • 有意水準(Significant Level):p値の閾値

 

  • 偽陽性:有意差がないのに、有意差ありと誤判定すること(Type 1 Error、α Error)
  • 偽陰性:有意差があるのに、有意差なしと誤判定すること(Type 2 Error、β Error)

仮説検定の注意点

p値を利用した研究の再現性が低いことから、有意水準を「0.005」にすべき、という声明があったりした。
仮説検定の誤った使用は、偽陽性の確率を上げてしまう。

  • 繰り返しで検定をしないこと。
    繰り返しで検定をすると、いつか有意差が出る。
    そこで有意差が出たと判断した場合に、偽陽性の確率を増やしてしまう懸念。
  • 有意差とビジネスインパクトは別であること。
  • 複数の検定を同時に行わないこと。

因果推論

  • 介入(Cause):広告を見せるなど
  • 結果変数(Outcome):購買行動など
  • 介入群もしくは実験群(Treatment Group):介入した標本
  • 対象群もしくは統制群(Control Group):介入していない標本

ある人に、広告を見せた場合と見せなかった場合の購買行動の変化が分かると、広告の効果を説明できるが、そのようなケースは「反事実(Counter Factual)」のため、観測できない。

  • 平均処置効果(Average Treatment Effect、ATE):母集団への効果は、個人単位の結果の差の期待値、という考え方。セレクションバイアスに注意が必要。
  • セレクションバイアス:介入群と統制群に差があり、介入有無と結果変数に相関がある状態。
  • ランダム化比較試験(Randomized Controlled Trial、RCT):介入群と統制群に差がない状態を作って比較する手法。A/Bテストのベースとなる考え方。

推薦アルゴリズム

  • 協調フィルタリング(Collaborative Filtering)
    • メモリベース協調フィルタリング(Memory-based Collaborative Filtering)
      • ユーザー間型協調フィ ルタリング(User-based Collaborative Filtering)
      • アイテム間型協調フィルタリング(Item-based Collaborative Filtering)
    • モデルベース協調フィルタリング(Model-based Collaborative Filtering)
  • 内容ベースフィルタリング(Content-based Filtering)

ユーザー間型協調フィルタリング

「あなたと同じ商品を買った人はこんな商品を買っています」

下記の流れでアイテムごとの評価値を算出。

  1. ユーザーの情報をベクトルで表現
  2. ユーザー間の類似度を求める
  3. 類似度に基づいて評価値を算出

類似度の種類

  • ピアソンの相関係数(Pearson Product-moment Correlation Coefficient)
  • コサイン類似度(Cosine Similarity)
  • ジャッカード係数(Jaccard Index, Jaccard Similarity Coefficient)

ピアソンの相関係数

相関係数と呼ぶとき、これを指していることが多い。
-1から1の値。

コサイン類似度

テキストの文章間の距離を算出するときに、よく使われる。
0から1の値。

ジャッカード係数

集合間の距離を計算することができる。
0から1の値。

実装例

「2:ユーザー間の類似度を求める」をして、類似度の高い順にN人ピックアップ。
「3:類似度に基づいて評価値を算出」として、N人の平均を算出。
もしくは、似ている人ほど評価値を上げるため、類似度の重みをかけた上で平均を算出。

アイテム間型協調フィルタリング

「この商品に興味がある人におすすめの商品」

調整済みコサイン類似度を使うことがある。

調整済みコサイン類似度

ユーザーの評価値の平均を割り引いて、ユーザー間の評価傾向の違いを除去したコサイン類似度。

ユーザー間型とアイテム間型の使い分け

  • どちらのデータの増加スピードが早いか、が使い分け判断ポイントの一つ。
  • ユーザーの行動履歴をどれだけ把握できているかもポイント。
    初めてのユーザーにもアイテム間型であれば推薦できるため。
    ただし、人気のアイテムばかりが推薦されることになるのは注意。

モデルベース協調フィルタリング

機械学習のモデルを作ることで、既知のデータの規則性をもとに予測する方法。

モデルの種類

  • クラスタリング
  • 回帰
  • トピックモデル(Topic Model)
  • 行列分解(Matrix Decomposition)

クラスタリング

嗜好が似ているユーザーをグルーピング。
あるユーザーが所属するグループに好まれるものを推薦。

回帰

回帰モデルによる評価値の予測。

トピックモデル

評価行列の次元削減をして、ユーザーの潜在的な思考を表現。

次元削減の種類

  • PLSA(Probabilistic Latent Semantic Analysis)
  • LDA(Latent Dirichlet Allocation)

行列分解

暗黙的なデータの行列分解に、Matrix Factorizationが使われる。

Matrix Factorization

評価行列を、ユーザーの行列と、アイテムの行列で表現。
確率的勾配法(SGD)を使える。

内容ベースフィルタリング

アイテムのメタ情報(映画のタイトルや監督など)と、ユーザーの嗜好があうアイテムを提示。

協調フィルタリングと内容ベースフィルタリングの使い分け

  • 協調フィルタリング
    • 〇:ドメイン知識の重要度が低い
    • 〇:数値化した評価や、機械学習モデルによる評価のため、推薦結果の多様性を高めやすい
    • ×:ユーザーの行動履歴がないと推薦が困難。新しいサービスで使いづらい。コールドスタート問題
  • 内容ベースフィルタリング
    • ×:ドメイン知識の重要度が高い
    • ×:人手によるルールの部分が多いので、推薦結果の多様性を高めづらい
    • 〇:新しいサービスでも推薦ができる

Factorization Machines

Matrix Factorizationを一般化したアルゴリズム。
ユーザーとアイテム以外の特徴量も扱うことができる。
疎な行列を扱うことができる。
特徴量感で影響を与え合う交互作用(Interaction)を考慮でき、相関関係がある特徴量も適切に扱える。

ライブラリとして、libFM(C++)、fastFM(Python)がある。
fastFMで扱える最適化アルゴリズムは、下記がある。

  • Alternated Least Squared (ALS)
    • ○:予測が速い
    • ○:パラメータがSGDより少ない
    • ×:正則化が必須
  • 確率的勾配法 (SGD)
    • ○:予測が速い
    • ○:大きなデータに対しても高速に学習ができる
    • ×:正則化が必須
    • ×:ハイパーパラメータの数が多い
  • MCMC (Markov Chain Monte Carlo Methods、マルコフチェインモンテカルロ法)
    • ○:ハイパーパラメータの数が少ない
    • ○:自動で正則化できる
    • ×:学習に一定の時間が必要
    • ×:学習と予測を同時にしなければいけない制約がある

Uplift Modeling

ランダム化比較試験(Randomized Controlled Trial)から、実験群と統制群の特徴量の違いを調べルコとで、効果が見込める対象にアクションできるようになる。

介入有無と結果(例としてCV)で、四象限に分けられる。

介入なし介入あり
CVなし「無関心」
コストがかかるなら介入を控える
「天邪鬼」
介入してはいけない
CVあり「説得可能」
できるだけうまく介入したい
「鉄板」
コストがかかるなら介入を控える

参考

KPIの決め方、目的と課題の考え方・整理の仕方

仮説の立て方と検証方法

学習曲線の詳細

機械学習プロダクト開発の進め方の参考

どのアルゴリズムを選ぶべきか

Choosing the right estimator — scikit-learn 0.23.2 documentation
scikit-learn: machine learning in Python

多クラス分類の説明

1.12. Multiclass and multilabel algorithms — scikit-learn 0.23.2 documentation
scikit-learn: machine learning in Python

交差エントロピー誤差関数

第18回 ロジスティック回帰
今回は線形分離できないデータにも適用できる分類モデルとして,「ロジスティック回帰」を紹介します。

因果推論

適切な標本サイズの決定

コメント

タイトルとURLをコピーしました