ただの可視化じゃ終わらない！Kaggleで学んだ分析の極意

## Kaggleメダル獲得を目指した挑戦の始まり

　エンジニア職へ転職したかった当時は社会人２年目。業務で経験を積めないということで実績づくりのためにkaggleへ挑戦したのが始まりでした。
 せっかくなら、「Grandmaster」になる！
日本では「Grandmaster」＝　コンペで良い成績、機械学習ができる人のイメージが強いkaggleですが、世界的に見ると全く違います。　データ分析やEDAの作成で「Grandmaster」とっている人も同じぐらい評価されています。

「Grandmaster」を最短で獲得する方法として、
結果が出るまでの期間が長いコンペで一発メダルを獲得するか。
データ分析のEDA作成で地道にメダルを獲得するか。

初心者の私は、後者を選びました。


## ただのデータ可視化で終わった初挑戦
最初のノートブックでは、データの可視化に全力を注ぎました。

<details><summary>全体コードはこちら</summary>

```python:python
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()

```
</details>


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636287/1a8e7dc3-a187-bbab-7b2d-de068753dfdc.png" width=70%>


https://www.kaggle.com/code/risakashiwabara/eda-interactive-visualization-in-python#--%E2%91%A3graph--%EF%BC%88sales%C3%97numerical-value%EF%BC%89


グラフを作成し、傾向を分析し、表現に凝っていくことで「データ分析をしている」という実感がありました。しかし、評価の結果は散々でした。振り返ると、ただデータの形を見ているだけで、分析の「目的」がまったくなかったのです。Kaggleで評価されるのは、データの本質を捉えた分析です。案の定、1年たったのに27voted 。単なる可視化では他の競合に到底及ばないことに、初めて気づかされました。

### 気づき
この失敗を通して、「データ分析はゴールを見据えてこそ意味を持つ」ことに気づきました。可視化はデータに取り組む第一歩に過ぎず、目的に基づく洞察がなければ、Kaggleの競争で結果を出すのは難しいと実感しました。

## ターゲットを絞り、他者から学ぶことで変わった視点
そこで、次の挑戦では「何を達成したいのか」を明確にすることから始めました。データ全体を見るのではなく、課題に対してどの部分が最も影響を与えるか、ターゲットを絞り込んで分析を進めることで、具体的な成果が出るようになりました。こうすることで、データの背後にあるストーリーが徐々に見え始めたのです。


:::note info
データ：プレミアリーグサッカーチーム
分析：得点と失点の関係性をグラフにし、試合数別を色として分類
気づき：サッカーは全てのチーム試合数が同じなはずなのでデータがおかしいのではないか
結果：データセットが間違っていた

![スクリーンショット 2024-11-04 19.46.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636287/88015072-0ff9-1bbb-f1d5-806e362abb87.png)




:::


<details><summary>全体コードはこちら</summary>

```python:python
# 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()
```
</details>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636287/78f0f01b-ce37-2613-3e67-b8bdced3ec41.png" width=70%>

https://www.kaggle.com/code/risakashiwabara/eda-scatterplots




また、Kaggleの他の上位参加者のノートブックにコメントを毎日することも始めました。トップkagglerがどのようにデータを扱い、どのような視点から考察しているのかを学ぶことで、分析の方向性が一気に広がりました。「このデータでは、何を重視するべきか？」「どの変数が特に有効なのか？」を考えることが、成功へのカギだと気づきました。

### 学び
目的を持ってターゲットを絞る：データ全体に目を向けるのではなく、特定の問題に対して有効な指標を絞り込むこと。
他者のノートブックからの学び：上位ノートブックには、独自の視点や効率的な分析手法が詰まっている。



## 挑戦を通して得た成長とこれからの展望
この経験を通して、「データ分析は単なる技術ではなく、戦略と目的意識が重要だ」ということを改めて実感しました。失敗と成功を繰り返すことで、分析へのアプローチが変わり、Kaggleの評価も徐々に上がってきました。まだ「Grandmaster」には届いていませんが、絶対に「Grandmaster」になります！





読んでくれてありがとうございます💓
kaggleもvotedしてくれると助かります

https://www.kaggle.com/risakashiwabara