さて、今回は機械学習のお話です。
一応なんちゃって
MLエンジニアなのでねwwwwwww
食べログさんのお店をデータ化したら
星の予測モデルが作れました。
解説動画はこちら
以前の動画では
食べログ分布というものについて触れました。
前回の記事はこちら食べログ分布は有るのか
今回は
実際に星を予測するモデルを作っていきましょう。
さて
こういった機械学習を用いた
予測モデルを作成するには
まずはデータが必要です。
こちらは
みなさん頑張って集めてみて下さい!!!!!
データとしては
こんなデータです。
コメント数、ブックマーク数や価格
コメントを残した人の星の平均などです。
そして予測をするのは
「星」のデータとなります。
予測モデルの作成に使用したコードは
次のようなコードになります。
少しづつみていきましょう。
まずは
データを読み込みします。
pd.read_csv()でCSVファイルを読み込みして
データフレームに変換できます。
なおこのデータは
すでに「前処理」と呼ばれる
機械学習用のデータに
整形する工程を終えたデータで
全て数値型のデータになっています。
次に訓練用とテスト用のデータに分けます。
train_test_splitを用いると
簡単に振り分けることができるので楽です。
今回は3割テスト、残りを訓練用としました。
モデルは
今回は自分がよく使っている
決定木,ランダムフォレスト,LightGBM,XGBoost
こちらの4種類を使っていきます。
モデルの作成は
model.fit(x_train, y_train)
これだけで済んでしまいます。
機械学習と言っても
コードはたったこれだけなんですよね・・・
モデルの作成が終わったら
次はテストデータで予測を行い
その精度を検証します。
y_predict = model.predict(x_test)
予測もたったこれ1行だけで済んでしまいます。
あとはこの結果から
どれだけ誤差が出たのかを見て
精度を図ります。
誤差を見るのに
MAE
RMSE
を使います。
今回はざっくり検証なので
どれだけ誤差が出たのかだけを見ることとします。
MAEはどんだけ誤差が出たかを平均したものです。
MAE0.083なら
+-0.083くらいはズレます。
実際の星が3.5だとして
大体予測が3.4-3.6くらいになるだろうという
モデルができました。
今回一番良かったものは
LightGBMですね。
誤差を可視化してみましょう。
平均で0.083ズレですが
大きいところでは0.36くらいはズレてますね
誤差の累積だと
80%くらいで0.15以内には収まりそうな感じですね。
予測の精度としては
まあまあなんじゃないでしょうか
これが仕事なら
クロスバリデーションしたり
パラメータいじったり
元々の特徴量作る集計の見直しなど
まだまだやること有ります。
色々すればもう少し
精度は上がるでしょうが
ざっくり検証なのでこれまでです。
さて
このデータのうちで
どれが一番予測に寄与しているでしょうか?
寄与度を出してみました。
こんな感じでした。
コメント数やブックマークの数
コメントした人の星の平均点
ディナー価格などが
関係しているようです。
実際の星の計算は
もう少し複雑な計算方法で
違うものでは有ると思いますが
近い形の星を算出できたと思います、
これで、ブラックボックスであった
星の計算方法に少し
近づいたんじゃないかなーと思います。
食べログに掲載されているお店さんで
点数を上げたければ
ここら辺がポイントになるのではと
思ってはおりますが・・・
このデータには
お店側が食べログ側に
お金を支払っているかどうか
というデータが含まれておりません。
なので、実はお金を支払っていないから
星が下がったということも
考えられなくは無いので
実際の予測にはこの情報が不可欠です。
どなたか
このフラグ値お持ちでは
無いでしょうかwwwwwwww
今回はここまでです
それでは。
一応なんちゃって
MLエンジニアなのでねwwwwwww
食べログさんのお店をデータ化したら
星の予測モデルが作れました。
解説動画はこちら
以前の動画では
食べログ分布というものについて触れました。
前回の記事はこちら食べログ分布は有るのか
今回は
実際に星を予測するモデルを作っていきましょう。
さて
こういった機械学習を用いた
予測モデルを作成するには
まずはデータが必要です。
こちらは
みなさん頑張って集めてみて下さい!!!!!
データとしては
こんなデータです。
コメント数、ブックマーク数や価格
コメントを残した人の星の平均などです。
そして予測をするのは
「星」のデータとなります。
予測モデルの作成に使用したコードは
次のようなコードになります。
import warnings warnings.filterwarnings('ignore') import pandas as pd import numpy as np from sklearn.tree import DecisionTreeRegressor from sklearn.ensemble import RandomForestRegressor import xgboost as xgb import lightgbm as lgm from sklearn.model_selection import train_test_split from sklearn.metrics import mean_absolute_error from sklearn.metrics import mean_squared_error import matplotlib.pyplot as plt %matplotlib inline data_df = pd.read_csv('tabelog_star_data.csv') data_df = data_df[data_df['星']>2.9] X = data_df.drop(['星'],axis=1) Y = data_df['星'] x_train, x_test, y_train, y_test = train_test_split(X,Y, test_size=0.3) models = [] models.append(("DesicionTree",DecisionTreeRegressor(max_depth=8))) models.append(("RandomForest",RandomForestRegressor(max_depth=8))) models.append(("LightGBM",lgm.LGBMRegressor(max_depth=8))) models.append(("XGBoost",xgb.XGBRegressor(max_depth=8,objective='reg:squarederror'))) result = {} for name,model in models: print(name) model.fit(x_train, y_train) y_predict = model.predict(x_test) mae = mean_absolute_error(y_test, y_predict) rmse = np.sqrt(mean_squared_error(y_test, y_predict)) result[name] = [mae,rmse] print(' MAE : ',mae) print('RMSE : ',rmse) print()
少しづつみていきましょう。
まずは
データを読み込みします。
pd.read_csv()でCSVファイルを読み込みして
データフレームに変換できます。
なおこのデータは
すでに「前処理」と呼ばれる
機械学習用のデータに
整形する工程を終えたデータで
全て数値型のデータになっています。
次に訓練用とテスト用のデータに分けます。
train_test_splitを用いると
簡単に振り分けることができるので楽です。
今回は3割テスト、残りを訓練用としました。
モデルは
今回は自分がよく使っている
決定木,ランダムフォレスト,LightGBM,XGBoost
こちらの4種類を使っていきます。
モデルの作成は
model.fit(x_train, y_train)
これだけで済んでしまいます。
機械学習と言っても
コードはたったこれだけなんですよね・・・
モデルの作成が終わったら
次はテストデータで予測を行い
その精度を検証します。
y_predict = model.predict(x_test)
予測もたったこれ1行だけで済んでしまいます。
あとはこの結果から
どれだけ誤差が出たのかを見て
精度を図ります。
誤差を見るのに
MAE
RMSE
を使います。
今回はざっくり検証なので
どれだけ誤差が出たのかだけを見ることとします。
DesicionTree MAE : 0.1047453451900971 RMSE : 0.14276028664764914 RandomForest MAE : 0.08806766700129451 RMSE : 0.11329995353232411 LightGBM MAE : 0.08365354791749746 RMSE : 0.10874470218772024 XGBoost MAE : 0.08733976372263648 RMSE : 0.11181978441280738
MAEはどんだけ誤差が出たかを平均したものです。
MAE0.083なら
+-0.083くらいはズレます。
大体予測が3.4-3.6くらいになるだろうという
モデルができました。
今回一番良かったものは
LightGBMですね。
誤差を可視化してみましょう。
平均で0.083ズレですが
大きいところでは0.36くらいはズレてますね
誤差の累積だと
80%くらいで0.15以内には収まりそうな感じですね。
予測の精度としては
まあまあなんじゃないでしょうか
これが仕事なら
クロスバリデーションしたり
パラメータいじったり
元々の特徴量作る集計の見直しなど
まだまだやること有ります。
色々すればもう少し
精度は上がるでしょうが
ざっくり検証なのでこれまでです。
さて
このデータのうちで
どれが一番予測に寄与しているでしょうか?
寄与度を出してみました。
191 | コメント数 | |
181 | ブックマーク数 | |
171 | 1rate_1000_s_mean | |
152 | 1rate_100_s_mean | |
149 | 1rate_5000_s_mean | |
134 | 1rate_500_s_mean | |
106 | 夜価格低 | |
105 | 1year_500_s_mean | |
81 | 1rate_2000_s_mean | |
72 | 1year_1000_s_mean | |
68 | 3month_500_s_mean | |
65 | 6month_500_s_mean | |
63 | 1rate_10000_s_mean | |
55 | 昼価格低 |
こんな感じでした。
コメント数やブックマークの数
コメントした人の星の平均点
ディナー価格などが
関係しているようです。
実際の星の計算は
もう少し複雑な計算方法で
違うものでは有ると思いますが
近い形の星を算出できたと思います、
これで、ブラックボックスであった
星の計算方法に少し
近づいたんじゃないかなーと思います。
食べログに掲載されているお店さんで
点数を上げたければ
ここら辺がポイントになるのではと
思ってはおりますが・・・
このデータには
お店側が食べログ側に
お金を支払っているかどうか
というデータが含まれておりません。
なので、実はお金を支払っていないから
星が下がったということも
考えられなくは無いので
実際の予測にはこの情報が不可欠です。
どなたか
このフラグ値お持ちでは
無いでしょうかwwwwwwww
今回はここまでです
それでは。