こんにちは。DX開発事業部の加谷です。

今回は、私が一時期狂ったようにハマった、データ分析コンペティションについて紹介したいと思います。

1. データ分析コンペティションとは

皆さん、データ分析コンペティションというものをご存知でしょうか。端的に言いますと、企業や組織が提供する実データと課題をもとに、参加者が予測精度や分析のアイデアを競い合う場です。代表的なものですとKaggleや、日本国内のサービスですとSIGNATEなどが有名です。

データ分析コンペティションでは、様々なコンテストがあるのですが、ここではよくある構造化データのコンペティションについて紹介したいと思います。

よくある課題の流れはこんな感じです。まず学習用データセット(train)をダウンロードし、そこから予測モデルを作ります。次に、正解が伏せられた評価用データセット(test)に対してモデルで予測を行い、その予測値を提出用ファイルにまとめてアップロードします。すると、どれくらい正解に近いかという暫定の精度評価が返ってきます。この精度をいかに正解に近づけられるかを競い合うゲーム?のようなものです。

文章だけだとわかりにくいので、この記事で後ほど例にあげる「電力価格を予測するコンペ」を想定して、簡単なデータを並べてみます。

まず与えられるのが、学習用データセット(train)です。気象条件などの特徴量と、正解にあたる電力価格がセットで入っています。

日時 気温(℃) 日射量(MJ/m²) 風速(m/s) 休日 電力価格(円/kWh)
2026-08-03 12:00 34.2 3.1 2.4 0 5.20
2026-08-03 18:00 31.5 0.1 3.0 0 21.80
2026-08-05 12:00 27.4 0.6 6.8 0 16.40
2026-08-08 12:00 33.8 3.3 2.1 1 0.01

次に渡されるのが、評価用データセット(test)です。特徴量は同じように入っていますが、電力価格の列がありません。ここを当てるのがコンペの課題となります。

日時 気温(℃) 日射量(MJ/m²) 風速(m/s) 休日
2026-09-07 12:00 29.6 2.8 2.9 0
2026-09-07 18:00 27.1 0.0 3.4 0
2026-09-12 12:00 28.9 3.0 2.2 1

そして、testの各行に対する予測値をまとめたものが提出用ファイルです。これをアップロードすると、伏せられていた正解と比べたスコアが返ってきます。

日時 電力価格(円/kWh)
2026-09-07 12:00 7.35
2026-09-07 18:00 19.02
2026-09-12 12:00 2.14

実際のコンペではこれが数万行から数百万行あり、特徴量の数も数十から数百に及びます。とはいえ、やることの骨格はこの3枚の表と同じです。

なお、上のtrainの表をよく見ると、日射量が多くて休日の行だけ価格が0.01円まで落ちています。この「なぜこの行だけ極端に安いのか」を説明できるかどうかが、後述するドメイン知識の話につながってきます。

精度の評価指標にはRMSE(二乗平均平方根誤差)が用いられる場合が多いです。これは予測値と正解のズレの大きさを表す指標なので、値が小さいほど良いという点だけ押さえておいてください。後述しますが、この数値を0.001削るために延々と悩むことになります。

2. コンペの課題は「実社会のデータ」が多い

具体的なコンペティションの例をあげてみます。

再生可能エネルギーに関するコンペティションの場合、過去数年間の発電量(太陽光や風力発電など)と気象情報のデータセットを用いて、卸電力価格を予測するモデルを作成します。賃貸住宅の家賃予測のコンペティションであれば、所在地や間取り、築年数や最寄駅からの距離などから家賃を予測するモデルを作成して、算出した家賃が現実のものとどれくらい近いかを競います。

データ分析コンペティションの面白いところは、課題に現実のものが使われることが多いという点です。コンペティションの中には、実際の企業が懸賞金をつけて開催しているケースも多くあります。その企業が困っているデータ予測を、コンペを通じてモデルを作り解決しようという側面があるわけです。

3. 実世界のデータに触れられる面白さ

もちろん懸賞金目当てで参加する方もいますが、私は残念ながら、まだそこを狙える域には達していません。それでもなぜコンペに参加するかというと、実世界のデータを扱うことができるから、というのが面白さの一つです。

機械学習や深層学習を学んでいると、初めのうちは、モデルを作ることはできても、実際のデータを前にした時に、どのような前処理を進めていけばいいのか具体的に想像できないことがあると思います。かといって、実務としてそのようなタスクに携わっていないと、具体的なデータを触ることができない。そんな時にデータ分析コンペティションが役立ちます。

4. モデルよりもドメイン知識が大切?

先に触れた、再生可能エネルギーの発電量から電力価格を予測するコンペティションを例にあげてみます。

データセットからモデルを作って予測値を提出するだけでしたら、実は非常に簡単です。極端なことを言ってしまえば、下記のように数行書けば動いてしまいます。

import lightgbm as lgb
from sklearn.metrics import root_mean_squared_error

model = lgb.LGBMRegressor()
model.fit(X_train, y_train)
pred = model.predict(X_valid)

print(root_mean_squared_error(y_valid, pred))

しかしこれだと、全く予測精度が出ません。

むしろ大切なのは、データのドメイン知識です。電力価格は需要と供給のバランスで決まるので、発電量が増えて消費電力が減れば下がり、逆になれば上がります。そのうえで、供給側と需要側に何が効くのかを考えていくことになります。

たとえば風力発電の発電量は風速の3乗に比例するので、風速をそのまま特徴量にするより、3乗した値を持たせた方が効きます。一方、需要側では休日カレンダーが効きます。休みの日は工場やオフィスの稼働が落ちて消費電力が下がるため、電力が余って価格も下がるためです。ほかにも、原子力発電所の定期点検で供給力が落ちるスケジュールや、そのエリアで日食が起きるスケジュールまで効いてくる場合があります(!)。

また気温に関しては、猛暑日は冷房需要で消費電力が上がる一方、太陽光パネルは高温になると変換効率が落ちます。つまり「気温が高い」という同じ特徴量が、需要を押し上げながら供給を押し下げる方向に効いてくる。気温の列をそのまま放り込むだけでは、この二つが打ち消し合ってしまうわけです。

ちなみに、供給が余りすぎると価格は下限に張り付きます。1章のtrainの表で休日の行だけ0.01円になっていたのがこれで、日本のJEPXのスポット市場は入札価格の下限が0.01円/kWhと決められています。下限のない欧州の市場では、価格がマイナスになることもあります(参照: JOGMEC「エネルギートランジションへの逆風の中、今後欧州はどこに向かうのか」)。同じ「電力価格」を予測するのでも、扱う市場のルールによって予測したい値の振れ幅が変わってきます。

こうした現実社会を知っていないとわからないようなシチュエーションを考えながら特徴量を作っていくと、RMSEが少しずつ下がっていきます。

5. 0.001を削る面白さと、やめ時のなさ

行き詰まってくると、RMSEがどれだけ頑張っても0.001くらいしか改善しなくなってきます。それでもコンペでは0.00001レベルの違いでも順位に関係してくるので、やめ時がわからなくなります。

この「やめ時がわからない」の正体は、結果がすぐ返ってくるからです。思いついた仮説を特徴量に落として投稿すると、数分後には暫定スコアと順位が更新されます。うまくいけば数字が動いて順位が一つ上がる。だめなら下がる。この即時性が楽しくて、あと一つだけ試そう、を延々と繰り返してしまいます。

ここが面白いところで、予測モデルはロジスティック回帰、決定木、LightGBM、XGBoostなどいろいろありますが、これらをチューニングしたりアンサンブルを行っても、精度向上には限界があります。それよりも、あらゆるドメイン知識を総動員して特徴量を作った方が、良い結果が出ることがあります。

つまり、データ分析を行う際は、モデルの深い知識よりも、そのデータが現実世界でどう動き回っているかというフィジカルな面を知っている方が良い結果が出る。ここに面白さがあります。

※ちなみに、投稿直後に表示される暫定スコアは評価用データの一部だけで計算されたもので、最終順位は残りのデータで確定します。暫定スコアばかり追いかけていると最終順位で大きく動くこともあるので、手元の交差検証(クロスバリデーション)のスコアも合わせて見ておくと安心だったりします。

6. 実際の業務との接続性

ドメイン知識が重要であることを知ることは、仕事にも通ずるところがあると思っています。いくら理論が正しくとも、実際の現場でどのような仕組みでデータが生まれているかを理解していないと、正しい結果が返ってこないというのが多くあると思います。センサーがどう設置されているのか、その業務では例外処理をどう運用しているのか、そのカラムは誰がどのタイミングで入力しているのか。こうした背景を知らないまま数字だけを見ていても、意味のある示唆にはなりません。

ただ、仕事ではそんなに多く色々なデータに触れられないですし、すぐに結果がわかるということも少ないです。

データ分析コンペティションの魅力は、リアルデータにアクセスでき、そのデータが現実世界でどのような振る舞いをしているかの理解を深めることで良い結果が残せる、しかもその結果がすぐに反映されるというところにあります。まさにゲーム感覚ですね!

7. メダルと称号がポートフォリオになる

コンペには様々なものがあり、構造化データや非構造化データ、時系列データ、最近ですとLLMや生成AIと組み合わせたコンペなども増えてきました。賞金が用意されているものから、純粋に順位を競うものまで様々あります。

賞金が用意されていないコンペはシンプルに自己満足になってしまうのですが、KaggleもSIGNATEも、上位に入るとメダルが発行されたり、コンペ毎に順位が記録されます。

Kaggleには、Competitions・Notebooks・Datasets・Discussionの4カテゴリごとに、Novice → Contributor → Expert → Master → Grandmasterという5段階のティアが設定されています。コンペの成績に応じて銅・銀・金のメダルが付与され、その枚数と色に応じてティアが上がっていく仕組みです(参照: Kaggle Progression System)。

SIGNATEには7つの称号があり、こちらも保有メダルの枚数や色に応じて上がっていきます。メダルはコンペの投稿者数と最終順位に基づいて付与され、たとえば投稿者数が100人未満のコンペなら上位10%で金メダル、といった基準が公開されています。加えて時間の経過とともに減衰する「ポイント」があり、称号とポイントの組み合わせでランキングが決まります(参照: ランキングシステム | SIGNATEサポート)。直近のコンペほどポイントが高くなる設計なので、継続的に参加している人が上位に来るようになっています。

このランク自体が、その人のスキルを表すポートフォリオにもなります。

※ちなみにSIGNATEでは、メダルが確定するとこのように証明書が発行されます。

SIGNATEのコンペで獲得したメダルの証明書

8. 生成AI時代に、データ分析コンペティションに参加する理由

最近は生成AIでコードを書けることもあり、コンペティションに参加するだけでしたら誰でもできるようになりました。でも、生成AIに丸投げして予測モデルを作ってもらったとしても、おそらく上位には入賞しません。

それよりも、そのコンペのデータに対してどれだけフィジカルなドメイン知識を持っているかが重要で、それはすなわち、どれだけ世界に対して博学か、教養があるか。物理、数学、経済、時には政治など、ありとあらゆる知識を総動員してデータを前処理するかという、知の総合格闘技みたいな側面があります。それで、あらゆる知識を動員してRMSEが0.001下がって順位が一つ上がったりすると、脳汁がドバドバ出ます。おすすめです。

(※始める前に一点だけ、規約の確認はしておいてください。生成AIの利用可否、外部データや学習済みモデルの使用可否はコンペごとに定められています。また、コンペで提供されるデータには再配布や目的外利用を禁じているものが多いので、業務で扱うデータとは明確に切り分けて取り組むのが安全です)

どちらから始めるかについては、初心者の場合はKaggleがおすすめです。ドキュメントもたくさん残っていますし、ブラウザ上でPython環境を使える「Kaggle Notebooks」も利用できるので、手元にGPUなどのマシン環境を作らなくても始められます。他の参加者が公開しているNotebookを読めるのも、独学には大きな利点です。

しかし基本は英語で、英語圏のドメインのデータセットが多いので、そこに不安を感じる場合は日本のサービスであるSIGNATEがおすすめです。国内のデータセットを使ったコンペが多く、課題文も日本語です。まずは【練習問題】タイタニックの生存予測のような練習問題から始めると、提出までの流れがつかめます。

9. データ分析コンペティションのすすめ

データ分析コンペティションというととっつきづらく感じるかもしれませんが、予測モデルの作成と提出用ファイルの作成・提出だけなら、生成AIに手伝ってもらえば誰でもできるようになりました。

そこから先は、あらゆる知識を総動員した知の総合格闘技です。しかも結果は数値と順位ですぐにわかり、上位に入賞したらメダルや称号というポートフォリオも作ることができる。おすすめです。