ビズオーシャンでのインターン日記

プログラミング未経験の文系大学生がインターンシップで頑張る日記です

vol.7 ロジスティック回帰 クリックの確率の予測

今回は、

ユーザーの過去のクリック状況をもとに
今後のクリック状況を予測し、
クリックする確率の高いユーザーに的を絞ってDMを送れば
より効率的にクリック数を得られるのではないか?


ということで、
ユーザーのクリック状況をロジスティック回帰で分析していきます。





ロジスティック回帰とは回帰分析のうちのひとつですが、
量的データを分析する線形回帰とは違い、

分類に注目して発生確率を予測する分析方法です。


ここではユーザー情報の分類に注目して
クリックする確率を予測します。






今回のロジスティック回帰の手順としては、

①データの整理
②トレーニングデータの作成
③トレーニングとテスト
④予測

という感じです。



①データの整理

ユーザー情報を選択肢2つで分類して整理します。
(Trueなら1、Falseなら0と表示)



あるユーザーは男性かそうでないか、営業職かそうでないか、2017年2月にクリックしたかしてないか、など、
ほぼ全ての情報を1と0で表します。

(ただ、年齢や最終ログイン日から今日までの日数などは普通にそのままの数字で)



選択肢は2つしか設けられないので、
今はクリック数は見ません。クリック有無だけです。




整理して表にするとこんな感じになります。


f:id:yuka_nakayama:20170523115250p:plain


②トレーニングの作成


今回は、
説明変数X:1,2月のクリック状況
従属変数y:3月のクリック状況  として、

1,2月のクリック状況が3月のクリック状況を決定する、と考えます。



また、ロジスティック回帰には

・モデル作成のためのトレーニング
・モデルの精度を確かめるテスト

という段階があるので
データをトレーニング用とテスト用に分けます。




分け方に関しては
過去のデータを全体的にトレーニング用・テスト用に分ける、
過去のデータのより古いほうをトレーニングに使ってより新しいほうのデータでテストする、
など いくつかありますが、今回は前者の分け方です。




トレーニング用とテスト用に分けるには、
関数「train_test_split」を使います。

from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_std, y_df, test_size=0.2, random_state=0)

 
※X_train:トレーニング用の1,2月のデータ
 y_train:トレーニング用の3月のデータ
 X_test:テスト用の1.2月のデータ
 y_test:テスト用の3月のデータ
 X_std:1月のクリックと2月のクリックを標準化したもの
 y_df:3月のクリックの有無


ここではユーザーの20%をランダムに選んで、
その20%クリック状況をテスト用にします。
残りの80%はトレーニング用です。



ちなみに、80%20%というのは特に決まりはないようです。


③トレーニングとテスト



X_trainとy_trainから
Xとyの関係を表す式(つまりモデル)を求めて、

その式にX_testを当てはめて求まるyと
実際のy_testを比較して精度を確認します。


④予測

精度を確認したうえで、
X_testから3月のクリックの確率を予測します。

f:id:yuka_nakayama:20170523133209p:plain




確率が高い順にユーザーを並べて
上位の50%のユーザーによるクリック数予測を見てみると、

分析に用いた全ユーザーによる実際のクリック数の81%を占めていました。


f:id:yuka_nakayama:20170523133242p:plain





つまり、DMを送るユーザーを半分に減らしても、
減らす前の80%のクリック数は得られる!ということです。





<メモ>

平均値の異なるデータを比較したいときは
それぞれのデータを標準化する。

標準化…平均値0、分散1になるように値を変換すること。

{(データの任意の値)ー(データの平均値)}/(標準偏差


関数はStandScalerを使う。




clf = LogisticRegression(n_jobs=-1, verbose=1)

n_jobs=1で並列計算ができる。
並列計算すると、問題を解く過程をより小さいものにできるので、効率が上がる。らしい。(ウィキペディア参考)