Kaggleメダル獲得を目指した挑戦の始まり
エンジニア職へ転職したかった当時は社会人2年目。業務で経験を積めないということで実績づくりのためにkaggleへ挑戦したのが始まりでした。
せっかくなら、「Grandmaster」になる!
日本では「Grandmaster」= コンペで良い成績、機械学習ができる人のイメージが強いkaggleですが、世界的に見ると全く違います。 データ分析やEDAの作成で「Grandmaster」とっている人も同じぐらい評価されています。
「Grandmaster」を最短で獲得する方法として、
結果が出るまでの期間が長いコンペで一発メダルを獲得するか。
データ分析のEDA作成で地道にメダルを獲得するか。
初心者の私は、後者を選びました。
ただのデータ可視化で終わった初挑戦
最初のノートブックでは、データの可視化に全力を注ぎました。
全体コードはこちら
train_aux = df_[['date', 'sales', 'dcoilwtico','onpromotion']].groupby('date').mean()
train_aux = train_aux.reset_index()
graph1 = go.Scatter(x=train_aux['date'], y=train_aux['dcoilwtico'],marker_color='blue', text="sales")
graph2 = go.Scatter(x=train_aux['date'], y=train_aux['sales'],marker_color='red', text="sales")
graph3 = go.Scatter(x=train_aux['date'], y=train_aux['onpromotion'],marker_color='yellow', text="sales")
fig = go.Figure().set_subplots(rows=3, cols=3)
fig.append_trace(graph1, row=1, col=1)
fig.update_layout({"title": f'Avg Sales by date for all stores and products',
"xaxis": {"title":"Date"},
"yaxis": {"title":"Avg Unit Sold"},
"showlegend": False})
fig.append_trace(graph2, row=1, col=2)
fig.append_trace(graph3, row=2, col=1)
with open('./plotly10-1.txt', 'w') as f:
f.write(fig.to_html(include_plotlyjs='cdn',full_html=False))
fig.show()
グラフを作成し、傾向を分析し、表現に凝っていくことで「データ分析をしている」という実感がありました。しかし、評価の結果は散々でした。振り返ると、ただデータの形を見ているだけで、分析の「目的」がまったくなかったのです。Kaggleで評価されるのは、データの本質を捉えた分析です。案の定、1年たったのに27voted 。単なる可視化では他の競合に到底及ばないことに、初めて気づかされました。
気づき
この失敗を通して、「データ分析はゴールを見据えてこそ意味を持つ」ことに気づきました。可視化はデータに取り組む第一歩に過ぎず、目的に基づく洞察がなければ、Kaggleの競争で結果を出すのは難しいと実感しました。
ターゲットを絞り、他者から学ぶことで変わった視点
そこで、次の挑戦では「何を達成したいのか」を明確にすることから始めました。データ全体を見るのではなく、課題に対してどの部分が最も影響を与えるか、ターゲットを絞り込んで分析を進めることで、具体的な成果が出るようになりました。こうすることで、データの背後にあるストーリーが徐々に見え始めたのです。
全体コードはこちら
# Calculate total matches (wins + draws + losses)
df['total_matches'] = df['wins'] + df['draws'] + df['losses']
norm = plt.Normalize(df['total_matches'].min(), df['total_matches'].max())
colors = plt.cm.viridis(norm(df['total_matches']))
plt.figure(figsize=(6, 4))
plt.scatter(df['goals_scored'], df['goals_conceded'], color=colors, s=100, edgecolor='black')
# Add labels for each point
for i, team in enumerate(df['team']):
plt.text(df['goals_scored'][i] + 1, df['goals_conceded'][i] + 1, team)
sm = plt.cm.ScalarMappable(cmap='viridis', norm=norm)
sm.set_array([])
plt.colorbar(sm, label='Total Matches')
plt.title('Goals Scored vs Goals Conceded (Colored by Total Matches)')
plt.xlabel('Goals Scored')
plt.ylabel('Goals Conceded')
plt.grid(True)
plt.show()
また、Kaggleの他の上位参加者のノートブックにコメントを毎日することも始めました。トップkagglerがどのようにデータを扱い、どのような視点から考察しているのかを学ぶことで、分析の方向性が一気に広がりました。「このデータでは、何を重視するべきか?」「どの変数が特に有効なのか?」を考えることが、成功へのカギだと気づきました。
学び
目的を持ってターゲットを絞る:データ全体に目を向けるのではなく、特定の問題に対して有効な指標を絞り込むこと。
他者のノートブックからの学び:上位ノートブックには、独自の視点や効率的な分析手法が詰まっている。
挑戦を通して得た成長とこれからの展望
この経験を通して、「データ分析は単なる技術ではなく、戦略と目的意識が重要だ」ということを改めて実感しました。失敗と成功を繰り返すことで、分析へのアプローチが変わり、Kaggleの評価も徐々に上がってきました。まだ「Grandmaster」には届いていませんが、絶対に「Grandmaster」になります!
読んでくれてありがとうございます💓
kaggleもvotedしてくれると助かります