scikit-learnで始めるExcel版機械学習。予測分析と評価
Python in Excel実務入門:Excelデータ分析の新パラダイム 第4回
ダウンロード サンプルファイル (21.7 KB)
回帰モデルで売上予測を作る(2)
評価指標の読み方
ここで、学習したモデルを評価してみましょう。回帰の代表指標として、RMSEとR²を見ます。RMSE(Root Mean Squared Error)とは、実測と予測のずれを二乗して平均し、平方根を取った値です。売上と同じ千円単位で読めます。
一方、R²(決定係数)とは、売上のばらつきのうち、説明変数でどれだけ説明できているかを示す値です。1に近いほどよく説明できており、当てはまりが悪いと0を下回ることもあります。このように、RMSEは「ずれの大きさ」、R²は「説明力」という別の見方なので、両方を並べて確認します。
from sklearn.metrics import mean_squared_error, r2_score
rmse = float(mean_squared_error(y_test, pred) ** 0.5)
r2 = r2_score(y_test, pred)
pd.Series({
"RMSE": round(rmse, 1),
"テストR2": round(r2, 3),
"学習R2": round(
model.score(X_train, y_train), 3)
})
今回のテストのRMSEは287.8千円です。売上平均1797千円に対し、およそ16%にあたる大きさで、予測が実測から平均してこの程度ずれることを示しています。テストのR²は0.777で、売上のばらつきのおよそ77%を、広告費とセッション数の2つで説明できていることを意味します。学習側のR²は0.814とテストよりわずかに高いものの、大きな差ではないため、学習データだけに強い状態にはなっていません。
精度をさらに上げたいときの次の一手は、説明変数を足すことです。今回の表では、商品カテゴリをダミー変数(文字を0と1の列に置き換えたもの)として加えると、テストR²は0.777から0.855へ上がります(コードは省略)。
ただし、足せば足すほど上がるわけではありません。ここに月もダミー変数にして加えると、学習R²は0.958まで上がる一方、テストR²は0.855から0.818へ下がります。学習データに合わせ込んだ分だけ、見ていないデータでは弱くなる。これが冒頭の過学習で、学習R²とテストR²を並べるのは、この兆候を見つけるためです。
予測値をExcel上のシートで取り扱う
ここでは、予測値などPythonで出力した値を、Excel上のシートで取り扱う方法を確認します。予測をシートでの作業に載せるには、予測値を列として表に足し、それをPythonセルの出力にします。
なお、評価はテスト8行で行いましたが、シートへ戻す列は全36行に付けることになります。うち28行は学習に使った行なので、その分の予測は実測に近い値になります。
out = df.copy() out["予測売上"] = model.predict(X).round(0).astype(int) out
Pythonセルの最後の式であるoutが、セルの出力になります。
実行直後はセル内にオブジェクトとして収まるため、シート上の表として展開するには、Pythonエディター右上の[出力]から「Excelの値」を選びます(またはセルの挿入データアイコンをクリック)。展開先のセルが空いていれば#SPILL!にならず、通常の表としてセルに展開されます。予測列がシートに乗れば、Excelのフィルタや関数参照にそのまま活用できます。
続いて、広告費の計画値から売上の見込額を出してみます。学習時と同じ列名のDataFrameをpredictに渡します。広告費400・450・500千円、セッション数25000・27000・29000の3通りです。
plan = pd.DataFrame(
[[400, 25000],
[450, 27000],
[500, 29000]],
columns=["広告費", "セッション数"])
plan["予測売上"] = model.predict(plan).round(0).astype(int)
plan
3通りの計画に対する予測売上が返ります。
予測売上は2347・2510・2672千円です。今回はコード内に数値を直接書きましたが、計画値をシートのセルに置きxl()で参照すれば、セルの値を書き換えるだけで再計算が走り、予測売上も自動で更新されます。
このように、分割してからfit/predictし、RMSEとR²で確かめたうえで予測列をシートへ戻せます。
この記事は参考になりましたか?
- Python in Excel実務入門:Excelデータ分析の新パラダイム連載記事一覧
-
- scikit-learnで始めるExcel版機械学習。予測分析と評価
- Python in Excelのmatplotlib/seabornで、意思決定に役立つデ...
- pandasでふぞろいなデータを分析資産に変える
- この記事の著者
-
WINGSプロジェクト 西 潤史郎(ニシ ジュンシロウ)
< WINGSプロジェクト について>有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 山田...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
