vol.9 線形回帰の練習・続き
前回の練習は
データ…2017年1月1日~3月31日の
東京の降雨量と、東京にいるユーザーのダウンロード数
分析の流れ…東京にいるユーザーのIDのデータテーブルと
そのユーザーによる3か月分のダウンロード数のデータテーブルをJOIN
↓
降雨量データの読み込み
↓
降雨量データとダウンロード数データをコンカット
↓
線形回帰
という感じでした。
降水量によって書式ダウンロード数は変わるのか、回帰分析してみたのですが、
直線の傾きが横軸とほぼ平行だったのと、
データがかなりバラついていたので、改めてですが降水量による影響は無しと分かりました。
今回はその延長で、
データ…2016年9月1日~2017年3月31日の
関東圏(1都6県)の降雨量と、そこにいるユーザーのダウンロード数
分析の流れ…東京にいるユーザーのIDのデータテーブルと
そのユーザーによる7か月分のダウンロード数データテーブルをJOIN
↓
東京の降雨量データの読み込み
↓
降雨量データとダウンロード数データをコンカット
↓
(その他6県も同様に)
↓
7つのデータフレームを縦にコンカット
↓
線形回帰
という感じです。
これをやって新しく覚えたことを
メモみたいに書いていきます。
〇データフレームを縦にコンカット
はじめ、
赤丸のところ(ダウンロード数のcolumns名)を
「東京」や「千葉」などと個別に設定していたのですが、
それだと横にコンカットされてNaNだらけになります。
縦にコンカットするにはcolumns名が同じである必要があるらしく、
「count」に統一しました。
(あとで詳しく書きますが、「count」じゃない名前にすればよかったです)
どのみち分析するときには県名とか関係なくなるので、
最初から同じcolumns名にしたほうがすっきりするような気もします。
1都6県×7か月分で全部で1483行あって、
真ん中の列がcount(ダウンロード数)、右の列がrain(降雨量)です。
*オレンジ色下線部
DL_rain.reset_index(drop=True, inplace=True)
分析のときは日付データも要らないので消しました。
indexは、消すというよりも、
「indexを降り直して、日付を普通の列に戻して、
その日付の列をdropする」感じです。
()内、drop=Falseだと普通の列に戻ったやつは消えません。
*青色下線部
pd.set_option("display.max_rows", x)
行数が多いと省略で表示されてしまうのですが、
これで最大x行まで表示できるようになります。
途中、データにNaNが混ざっている疑惑があって、
これくらいなら目視で確認できるだろうということで
最大1500行表示できるようにしました。
〇(目視でなく、)NaNがないか確認する
DL_rain.isnull().values.any()
実行したらFalseと表示されたので
NaNは無かったということです…
〇ダウンロード数のcolumns名を「count」以外にしたほうがよかった
説明変数Xを降雨量、従属変数yをダウンロード数にして、
線形回帰にあてはめようとしたら、
データの型がだめみたいなそんな感じのエラーが出ました。
降雨量データもダウンロード数データも数字なはずなのに???となったんですが、
y = DL_rain.count
で実行しようとしていて、
それだと「count」がデータフレームのcolumns名としてではなく
pandasのcount関数として認識されているとのことでした。
[“”]でとじるとcolumns名の「count」を指定できて、
データ型を確認するとちゃんとintegerになってます。
これで線形回帰ができるようになりました。
from sklearn import linear_model clf = linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1) DL_rain_fit = clf.fit(X, y) import matplotlib.pyplot as plt plt.scatter(X, y) plt.plot(X, clf.predict(X))
回帰係数…clf.coef_ で 0.96、
切片…clf.intercept_ で 790.89
直線の式は y=0.96x+790.89 です。
前回も書きましたが、
降雨量とダウンロード数には因果関係が無いので、
分析方法としては、ほんとうは線形回帰でなく相関のほうが適しています。
もし、降水量と書式ダウンロード数に因果関係がある場合、
相関係数と回帰係数は1に近づきます。
が、「雨が降ったら書式をダウンロードしたくなる」ということを論理的に説明しなければいけなくなります。
実際、雨が降っても降らなくても、書式が必要ならダウンロードするし、不要であればダウンロードしないので、これらには因果関係が無いということができます。
参考)リクルートマネジメントソリューションズ 連載・コラム「『回帰分析』で因果関係を分析する」(2017年9月11日閲覧)
https://www.recruit-ms.co.jp/issue/column/0000000564/
.