はじめに
前回、精度が大幅に良くなりました。
今回はその結果を使用してコスパの良さげなパラメータが何なのかを調べてみます。
具体的には「予測された評価値(★の値)よりも実際の評価値(★の値)が高いレストランのパラメータはどうなっているのか」を確認していきます。
つまり、予測よりも高い評価を持つお店こそパフォーマンスの高いお店であり、そのお店たちにはどんな傾向があるのかを確認するのが今回の記事の趣旨になります。
この記事でわかること
コスパの良いレストランの値はどうなっているか
今回使用するデータについて
今回使用するデータは北海道の食べログに載っていたレストランですが、データ数はランチが16563件、ディナーが13590件です。
実際は3万件以上あるのですが、ブックマーク数とレビューコメント数が載っていないお店を除くとこの件数になります。
ですので、まだ実はおいしいお店があるのかもしれないですが、精度が高い状態で分析をしたいので、このデータ数で分析を行います。
「実際の値 – 予測値」が高い値
まず「実際の値 – 予測値」が高い値がどれくらいのものなのかを求めてみます。
とりあえず、ベスト10を求めます。
0.302 0.223 0.213 0.21 0.178 0.175 0.167 0.167 0.159 0.154
(ベスト30を求めるpythonコードはこちらで記載したものとほぼ同じなので参考にしてみてください)
大きいものだと0.3程離れていますね。
予測値よりも0.3程評価が高いお店となります。
各パラメータを分析
では実際に分析をしていきます。
分析方法について
今回、分析対象となるパラメータは以下です。
- 「料理」
- 「ドリンク」
- 「空間・設備」
- 「利用シーン」
- 「受賞アワード」
- 「ジャンル」
これらのパラメータに対して「実際の値 – 予測値」が高い値ベスト100を求めます。
それぞれに含まれている数が全体(ブックマーク数とレビューコメント数があるもの)の割合の何パーセント含まれているかで順位付けをします。
これは実際の値がその全体の中では多く占めているものが結果的にベスト100に多く含まれてしまうことを避けるためです。(正規化のようなことをするということですね。)
(ちょっと説明が分かりにくいかもなので、実際に以下でやってみながら説明も記載していきます。)
ランチとディナーに分けて行います。
それでは分析していきましょう。
ランチ
「料理」
「料理」のところだけ丁寧に説明します。
「料理」の値のベスト100は以下のような値になっています。
[] 71 [魚料理にこだわる] 9 [野菜料理にこだわる, 魚料理にこだわる] 7 [野菜料理にこだわる] 3 [英語メニューあり] 2 [野菜料理にこだわる, 魚料理にこだわる, 英語メニューあり] 2 [野菜料理にこだわる, 魚料理にこだわる, 朝食・モーニングあり] 1 [野菜料理にこだわる, 健康・美容メニューあり] 1 [野菜料理にこだわる, 魚料理にこだわる, 健康・美容メニューあり, ベジタリアンメニューあり] 1 [野菜料理にこだわる, 健康・美容メニューあり, ベジタリアンメニューあり] 1 [健康・美容メニューあり] 1 [野菜料理にこだわる, 魚料理にこだわる, 健康・美容メニューあり] 1
コスパの良いお店ベスト100の内、値が入っていないお店は71件あるということですね。
残りは、上記のリストの通りです。
複数の「料理」の項目があるお店もありますね。
では実際に全体の割合に対するベスト100の中でどれが割合として大きいかベスト10を求めてみます。
以下のようになりました。
Value Ratio 朝食・モーニングあり 0.017391 魚料理にこだわる 0.013877 野菜料理にこだわる 0.012884 ベジタリアンメニューあり 0.008065 英語メニューあり 0.007767 アレルギー表示あり 0.007463 健康・美容メニューあり 0.006289 カロリー表示あり 0.000000 デザート食べ放題あり 0.000000
ちなみに、割合じゃなくて個数での順位が以下です。
魚料理にこだわる 16 野菜料理にこだわる 13 英語メニューあり 4 朝食・モーニングあり 4 健康・美容メニューあり 3 ベジタリアンメニューあり 2 アレルギー表示あり 1
これからわかる通り、個数と割合の順位が等しくなるとは限りません。
単純に「魚料理にこだわる」の全体に占める割合が多ければそれに引っ張られて順位が高くなってしまいます。(北海道だから「魚料理にこだわる」お店が多いのも納得がいきます。)
ということで割合で順位を求めています。
以下で求めている項目についても同様に割合で求めていきます。
また、一応、値を求めたコードも載せておきます。
以前もコスパの良いベスト100の割合を求めるというのはコードにしていますが、この時は要素がリストではなかったので、今回は少し複雑です。
import pandas as pd
from collections import Counter
# 要素ごとに値の出現回数をカウント
counter_a = Counter(val for sublist in kouhyouka_best_100['dish'] for val in sublist)
counter_b = Counter(val for sublist in restaurant_train_data['dish'] for val in sublist)
# 値ごとの比率を計算してDataFrameに格納
ratios = {}
for value in set(counter_a.keys()).union(counter_b.keys()):
ratio = counter_a.get(value, 0) / counter_b.get(value, 1)
#print(ratio)
if isinstance(value, list):
for sub_value in value:
ratios[sub_value] = ratio
else:
ratios[value] = ratio
keys = list(ratios.keys())
values = list(ratios.values())
ratios_df = pd.DataFrame({'Value': keys, 'Ratio': values})
# 比率でランキングを計算して表示
ranked_ratios = ratios_df.sort_values(by='Ratio', ascending=False)
print(ranked_ratios)
kouhyouka_best_100はコスパのよいお店ベスト100のdataframe、
restaurant_train_dataは全部のレストランのデータdataframe
です。
‘dish’は「料理」のデータが入ったカラムを示しています。
「ドリンク」
ここから以下は、データをポンポンと載せていきます。
ランチの「ドリンク」は以下。
Value Ratio ワインにこだわる 0.025276 日本酒にこだわる 0.017408 ワインあり 0.010235 カクテルあり 0.009447 日本酒あり 0.007407 焼酎あり 0.007001 焼酎にこだわる 0.006494 カクテルにこだわる 0.005587
「空間・設備」
Value Ratio バリアフリー 0.012676 車椅子で入店可 0.012146 席が広い 0.011280 掘りごたつあり 0.010435 オシャレな空間 0.010273 電源あり 0.008016 無料Wi-Fiあり 0.007671 落ち着いた空間 0.007650 カウンター席あり 0.006324 ソファー席あり 0.003854
「利用シーン」
Value Ratio デート 0.041096 接待 0.036364 家族・子供と 0.007900 知人・友人と 0.005112 一人で入りやすい 0.005040 女子会 0.000000 大人数の宴会 0.000000 合コン 0.000000
「受賞アワード」
The Tabelog Award 2022 Silver 受賞店 1.000000 The Tabelog Award 2023 Silver 受賞店 1.000000 The Tabelog Award 2022 Bronze 受賞店 0.500000 The Tabelog Award 2019 Bronze 受賞店 0.500000 The Tabelog Award 2021 Silver 受賞店 0.500000 The Tabelog Award 2023 Bronze 受賞店 0.400000 食べログ 日本料理 EAST 百名店 2023 選出店 0.333333 The Tabelog Award 2021 Bronze 受賞店 0.333333 食べログ 日本料理 EAST 百名店 2021 選出店 0.333333 食べログ イタリアン EAST 百名店 2021 選出店 0.285714
「The Tabelog Award 2022 Silver 受賞店」と「The Tabelog Award 2023 Silver 受賞店」は確実にコスパの良いお店として入っていますね。
母数が少なければこういうことも起きますね。
「ジャンル」
Value Ratio タコス 1.000000 メキシコ料理 0.250000 イノベーティブ 0.166667 オーベルジュ 0.105263 ビアガーデン 0.090909 串焼き 0.083333 ろばた焼き 0.047619 惣菜・デリ 0.040000 タイ料理 0.040000 スペイン料理 0.034483
ディナー
「料理」
Value Ratio 野菜料理にこだわる 0.017115 ベジタリアンメニューあり 0.016598 健康・美容メニューあり 0.014768 魚料理にこだわる 0.013896 英語メニューあり 0.008982 朝食・モーニングあり 0.004630 カロリー表示あり 0.000000 デザート食べ放題あり 0.000000 アレルギー表示あり 0.000000
「ドリンク」
Value Ratio ワインにこだわる 0.019946 日本酒にこだわる 0.013049 カクテルにこだわる 0.011928 ワインあり 0.010608 焼酎にこだわる 0.009000 焼酎あり 0.007833 日本酒あり 0.007794 カクテルあり 0.007549
「空間・設備」
Value Ratio 電源あり 0.012821 オシャレな空間 0.012014 落ち着いた空間 0.010733 ライブ・生演奏あり 0.009901 スポーツ観戦可 0.009554 車椅子で入店可 0.008696 席が広い 0.008008 カウンター席あり 0.007928 無料Wi-Fiあり 0.007752 カップルシートあり 0.006369
「利用シーン」
Value Ratio デート 0.037190 女子会 0.013333 接待 0.008811 知人・友人と 0.006329 家族・子供と 0.005665 一人で入りやすい 0.005510 大人数の宴会 0.005181 合コン 0.000000
「受賞アワード」
Value Ratio The Tabelog Award 2018 Gold 受賞店 1.000000 The Tabelog Award 2021 Gold 受賞店 1.000000 The Tabelog Award 2022 Gold 受賞店 1.000000 The Tabelog Award 2020 Silver 受賞店 1.000000 The Tabelog Award 2019 Gold 受賞店 1.000000 The Tabelog Award 2017 Silver 受賞店 0.500000 The Tabelog Award 2023 Silver 受賞店 0.500000 The Tabelog Award 2021 Silver 受賞店 0.500000 The Tabelog Award 2023 Bronze 受賞店 0.181818
「ジャンル」
Value Ratio くじら料理 0.333333 東南アジア料理 0.125000 チーズ料理 0.111111 豚しゃぶ 0.100000 タイ料理 0.050000 イノベーティブ 0.050000 惣菜・デリ 0.043478 インド料理 0.038462 フレンチ 0.037736 コロッケ 0.034483
まとめ
今度、北海道に行くときは
ランチで、タコス料理
ディナーで、くじら料理
の店も候補に入れて探して食べてみようと思います。
以上!!
今回はここまで。ではまた。👋👋👋
この記事、需要あるのかな…。