snackとbento(およびmen)の相関みてみたけど残念だった話
snackとbento(およびmen)の相関が-1に近いので、どちらかの予想値出して特徴量にすれば良い結果が出るのでは、と思ったけど残念だった話。雑談です。
まず、各商品の相関を取ってみました。季節性が大きい商品があるので3-5月のデータに限ってヒートマップを作ってみると……
import seaborn as sns
months = [str(i) for i in range(3,6)]
train_within_months = train_raw_df[train_raw_df["date"].str[:1].isin(months)]
train_within_months = train_within_months.drop(columns=["id", "date", "highest", "lowest", "rain"])
df_corr = train_within_months.corr()
sns.heatmap(df_corr, vmax=1, vmin=-1, center=0)
あんまり通年と変わんないですね(残念ポイントその1)
odenとかiceの逆相関は気温からくるものだよねーと思いつつ、右下が気になります。snackとbento(およびmen)の相関が低い。snackって何なのかわからないので、これは便利そうです。
ということで表示してみました。
んん?思ってたのと違う。
曜日をつけてみましょう。
ただの曜日の違いでした(残念ポイントその2)。snackとbentoが違う曜日に売れるのね……。売れてる曜日は既に特徴量にいれてるので、収穫はなかったとさ。
これだーという特徴量見つからないですねぇ。
snacks = ["snack"+str(i) for i in range(1,4)]
bentos = ["bento"+str(i) for i in range(1,5)]
mens = ["men"+str(i) for i in range(1,7)]
comparing_bento = True
comparisons = bentos if comparing_bento else mens
fig = plt.figure(dpi=250)
n_col, n_row = len(snacks), len(comparisons)
cm = plt.cm.get_cmap('tab20')
df = train_raw_df.copy() #dataframe from the train csv
df["weekday"] = df.index % 7
for idx in range(n_col * n_row):
ax = fig.add_subplot(n_row, n_col, idx+1)
snack_item, compare_item = snacks[idx%len(snacks)], comparisons[idx//len(comparisons)]
ax.set_title(snack_item + " x " + compare_item, fontsize=4)
for w in range(7):
ax.scatter(df.loc[df["weekday"]==w, snack_item], df.loc[df["weekday"]==w, compare_item], marker=".", color=cm.colors[w])
plt.setp(ax.get_xticklabels(), fontsize=3)
plt.setp(ax.get_yticklabels(), fontsize=3)
plt.subplots_adjust(wspace=0.2, hspace=0.6)
plt.show()