今回は第8回、ノック36〜ノック40までをやっていきたいと思います。
Python実戦データ分析100本ノックは、pandas の使い方やデータサイエンスを実戦的に学べる書籍なのでぜひ手に取ってみてください。
↓Python実践データ分析100本ノック レビューでも実用的と高評価ですね。
ノック36:翌月の利用回数予測を行うためのデータ準備をしよう

翌日の利用回数を予測する為、直近の6ヶ月の利用回数をデータとして
読み込ませます。まずは、顧客毎、年月毎にデータを整理します。
uselog["usedate"] = pd.to_datetime(uselog["usedate"])
uselog[“年月”] = uselog[“usedate”].dt.strftime(“%Y%m”)
uselog_months = uselog.groupby([“年月”,”customer_id”],as_index=False).count()
uselog_months.rename(columns={“log_id”:”count”}, inplace=True)
del uselog_months[“usedate”]

for文を使って、過去6ヶ月分の利用データを取得して列に追加していきましょう。難しいですけど写経してもOKと思います。
year_months = list(uselog_months[“年月”].unique())
predict_data = pd.DataFrame()
for i in range(6, len(year_months)):
tmp = uselog_months.loc[uselog_months[“年月”]==year_months[i]]
tmp.rename(columns={“count”:”count_pred”}, inplace=True)
tmp_before = uselog_months.loc[uselog_months[“年月”]==year_months[i-j]]
tmp_before.rename(columns={“count”:”count_{}”.format(j-1)}, inplace=True)
tmp = pd.merge(tmp, tmp_before, on=”customer_id”, how=”left”)
predict_data = pd.concat([predict_data, tmp], ignore_index=True)

欠損値を消すのが1行目
新たにindexを振り直すのが2行目の処理です。
predict_data = predict_data.dropna()
predict_data = predict_data.reset_index(drop=True)
ノック37:特徴となる変数を付与しよう

まず、start_dateれ列を追加します。
predict_data = pd.merge(predict_data, customer[[“customer_id”,”start_date”]], on=”customer_id”, how=”left”)

次にnow_date 列を作り、start_date との差から、会員期間を作成しましょう。

いい感じですね。
次は、いよいよ予測モデルを作ります!
ノック38:来月の利用回数予測モデルを作成しよう

sklearn の線形モデル( linear_model)で解析します。

最後に予測精度を計測します。
ノック39:モデルに寄与している変数を確認しよう

ここまで、count0-count5 と会員期間を変数としましたが、どのパラメータが
いちばん大きいか確認しましょう。

結果、count0 つまり直近月の回数が最も関連する事がわかります。
ノック40:来月の利用回数を予測しよう

このモデルは、新たにデータを入れるとすぐに予測結果が表示されます。
顧客の利用データを入れると結果がでます。

最後に出力します。
お疲れ様でした。これで4章は終了です。次回はいよいよ【第9回】5章:ノック41ー45に進んでいきたいと思います。
あと少しです!
コメント