俺人〜OREGIN〜俺、バカだから人工知能に代わりに頑張ってもらうまでのお話

俺って、おバカさんなので、とっても優秀な人工知能を作って代わりに頑張ってもらうことにしました。世界の端っこでおバカな俺が夢の達成に向けてチマチマ頑張る、そんな小さなお話です。現在はG検定、E資格に合格し、KaggleやProbSpaceのコンペに参画しながら、Pythonや機械学習、統計学、Dockerなどの勉強中です。学習したことをブログにアウトプットすることで、自分の身に着けていきたいと思います。まだまだ道半ばですが、お時間がありましたら見て行ってください。

エピソード3-5: KaggleでKickstarter Projectsに挑戦する。(採用する説明変数の選択)

前回から取り組み始めた「Kaggle」の過去問「Kickstarter Projects」にて、分類に採用する説明変数を選択していきたいと思います。

0.前回の続きなので、ライブラリのインポートや、データ読み込み、データの前処理が実施されている前提です。前回をご覧になっていない方は、以下をご参照ください。

oregin-ai.hatenablog.com

1.散布図行列を描いてみます。

# まず、201801の散布図行列を書いてみる
pd.plotting.scatter_matrix(df_f18_SorF, figsize=(30,30))
plt.show()

f:id:kanriyou_h004:20190504225616j:plain

散布図行列から「state」と相関がありそうなのは、「goal」、「pledged」、「backers」、「usd pledged」、「usd_pledged_real」、「usd_goal_real」にみえるのですが、「pledged」、「usd pledged」、「usd_pledged_real」は、結果として得られる数値なので、予測には使えません。 実質、「goal」、「backers」、「usd_goal_real」の3つが予測には使えると判断し、さらなる分析を実施する。

2.「goal」と「usd_goal_real」の関係を見てみる。

#成功と、失敗でデータを分ける。
df_f18_S = df_f18_SorF[df_f18_SorF['state']==1]
df_f18_F = df_f18_SorF[df_f18_SorF['state']==0]

#それぞれをプロットしてみる
plt.grid(which='major',color='black',linestyle=':')
plt.grid(which='minor',color='black',linestyle=':')
plt.plot(df_f18_F["usd_goal_real"], df_f18_F["goal"], 'o', color='C1', label='false')
plt.plot(df_f18_S["usd_goal_real"], df_f18_S["goal"], 'o', color='C0', label='successful')
plt.legend(loc='best')
plt.show()

 

f:id:kanriyou_h004:20190506184805j:plain

原点周りで重なっていてうまくわかれていなさそうです。

両方の対数をとってみます。

plt.grid(which='major',color='black',linestyle=':')
plt.grid(which='minor',color='black',linestyle=':')
plt.plot(np.log(df_f18_F["usd_goal_real"]), np.log(df_f18_F["goal"]), 'o', color='C1', label='false')
plt.plot(np.log(df_f18_S["usd_goal_real"]), np.log(df_f18_S["goal"]), 'o', color='C0', label='successful')
plt.legend(loc='best')
plt.show()

 f:id:kanriyou_h004:20190506185203j:plain

はやり重なってしまっているので、どちらかの説明変数で十分そうです。
「goal」を採用することにします。

 

3.「goal」と「usd_goal_real」の関係を見てみる。

#成功と、失敗でデータを分ける。
df_f18_S = df_f18_SorF[df_f18_SorF['state']==1]
df_f18_F = df_f18_SorF[df_f18_SorF['state']==0]

#それぞれをプロットしてみる
plt.grid(which='major',color='black',linestyle=':')
plt.grid(which='minor',color='black',linestyle=':')
plt.plot(df_f18_S["backers"], df_f18_S["goal"], 'o', color='C0', label='successful')
plt.plot(df_f18_F["backers"], df_f18_F["goal"], 'o', color='C1', label='false')
plt.legend(loc='best')
plt.show

f:id:kanriyou_h004:20190506163636j:plain

なんとなく、オレンジと青が分かれていることが見えてきた。

オレンジ、青ともに大きくなるほど分散しているように見えるので、対数をとってみることにします。 

#Log(0)対策
delta=1

#「goal」、「backers」の対数の関係を見てみる。
plt.grid(which='major',color='black',linestyle=':')
plt.grid(which='minor',color='black',linestyle=':')
plt.plot(np.log(df_f18_S["backers"]+delta), np.log(df_f18_S["goal"]+delta), 'o', color='C0', label='successful')
plt.plot(np.log(df_f18_F["backers"]+delta), np.log(df_f18_F["goal"]+delta), 'o', color='C1', label='false')
plt.legend(loc='best')
plt.show()

f:id:kanriyou_h004:20190506163909j:plain

さらに分かれている感が出てきました。

「goal」と「backers」は、説明変数として使えそうです。

 

 

ここまでの関係の調査から、目的変数「state」を'successful''false'に分類するためには、説明変数として「goal」と「backers」が使えそうだということがわかってきました。

次回は、この2つの説明変数を使って分類モデルを作っていきたいと思います。

 

 2019年3月9日(土)にG検定を受験し、見事合格できました!

受験の体験記や勉強法などを別のブログにまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

g-kentei.hatenablog.com