レッスン 1 / 5
DataDojoでコンペに参加しよう
学ぶコト
- データ分析コンペのしくみ(学習データ・テストデータ・評価指標・リーダーボード)
- DataDojo への登録と、コンペのページの見方
- 提出ファイルの形と、採点のしくみ(RMSE・1日5回まで)
- 提出する前に、ファイルの形を確かめる方法
このコースでは、ここまでのコースで学んだデータ分析を、本物のデータ分析コンペで試します。使うのは、スタアカの講師ウマたんが運営している、初心者向けの国産コンペのサイト「DataDojo」です。
このレッスンでは、データ分析コンペとは何かを確かめてから、DataDojo に登録し、データを手に入れて、予測を提出するまでの流れを見ていきます。最後に、提出する前にファイルの形を確かめるコードを、ブラウザの中で動かします。
データ分析コンペとは
データ分析コンペ(コンペティション)は、主催者が出した課題に対して、参加者が予測のモデルを作り、その精度を競う大会です。世界では Kaggle、日本では SIGNATE などが有名です。
どのコンペも、だいたい次の形をしています。
| 用語 | 意味 | 中古マンションのコンペでは |
|---|---|---|
| 学習データ | 答え(目的変数)が付いたデータ。これでモデルを作る | 2019年までの取引、63万件あまり |
| テストデータ | 答えを隠したデータ。これを予測して提出する | 2020年1〜6月の取引、19,466件 |
| 目的変数 | 予測するもの | 取引価格(総額)の常用対数 |
| 評価指標 | 予測の良さを測るものさし | RMSE(小さいほど良い) |
| 提出ファイル | テストデータの1件ずつに予測を書いた CSV | ID と予測の2列 |
| リーダーボード | 参加者のスコアの順位表 | 1人1行。それぞれのいちばん良いスコアで並ぶ |
参加者は学習データでモデルを作り、テストデータの答えを予測して、CSV で提出します。主催者は隠した答え(正解データ)を持っていて、提出された予測と比べてスコアを計算し、リーダーボードに載せます。
実務との違い
機械学習実装のコースで学んだ CRISP-DM でいうと、コンペでは「ビジネス理解」と「実装」が、主催者によって先に決められています。何を予測するか、何で評価するかは決まっていて、参加者が取り組むのは、データ理解(EDA)・データ準備(前処理と特徴量)・モデル構築・評価のくり返しです。
実務では、課題を決める・データを集める・作ったモデルを現場で使ってもらう、といったところにも多くの時間を使います。そのため、コンペで強いことが、そのまま実務で強いことにはなりません。それでも、決まったものさしで自分の腕を測り、工夫するたびにスコアで結果が返ってくる経験は、ほかではなかなかできません。前処理や検証のしかたで、同じ手法でも結果が大きく変わることを、手を動かして確かめられます。
DataDojo とは
DataDojo は「学習講座と一緒に挑戦できる」ことを特徴にした、日本語のデータ分析コンペのサイトです。
- 無料:コンペの機能(データのダウンロード・提出・採点・リーダーボード)は、すべて無料で使えます
- 講座とつながっている:コンペごとに、解き方を学べる講座が紹介されています
- その場で採点:CSV を提出すると、すぐにスコアが出ます
- Google アカウントでログイン:登録はボタン1つです
2026年11月時点で開催中のコンペは、次の1つです。
| コンペ | 課題 | 評価指標 | 期間 |
|---|---|---|---|
| 中古マンション価格予測チャレンジ | 中古マンションの取引価格を予測する(回帰) | RMSE(小さいほど良い) | 2026年3月14日から。終了日は決まっていない |
このコンペは、もとは国産のコンペのサイト Nishika で開かれていたもので、Nishika のサービスが終わったため、DataDojo で開かれることになりました。このコースの次のレッスンからは、このコンペに取り組みます。DataDojo に新しいコンペが加わったら、このコースにもレッスンを足していきます。
ウマたんDataDojo は、学んだことをすぐに試せる場所がほしくて作りました。最初はスコアが悪くてもかまいません。まずは1回提出して、自分の名前がリーダーボードに載るところまで進めてみてください。
参加のしかた
コンペの一覧を開く
コンペティションの一覧を開き、「中古マンション価格予測チャレンジ」を選びます。ログインしなくても、コンペの説明とルールは読めます。
Google アカウントでログインする
右上の「ログイン」から「Googleで続ける」を押します。ログインすると、利用規約とプライバシーポリシーに同意したことになります。
表示名を確かめる
リーダーボードには、Google アカウントの名前とアイコンが出ます。本名を出したくない人は、ログインのあとの「ダッシュボード」で、プロフィールの「編集」から表示名を変えておきましょう。
データをダウンロードする
コンペのページの「データ」のタブから、4つのファイルをダウンロードします(下の表)。
予測を作って提出する
次のレッスンからの手順で
submission.csvを作り、「提出」のタブで CSV を選んで「提出する」を押します。スコアはその場で出ます。
コンペのページには、4つのタブがあります。
| タブ | 中身 |
|---|---|
| 概要 | コンペの背景・データの説明・評価指標・ルール、開始日と終了日、1日の提出の上限、つながっている講座 |
| データ | ダウンロードできるファイル |
| リーダーボード | 参加者の順位。名前とスコアは、ログインしている人だけが見られる |
| 提出 | CSV の提出と、自分の提出の記録(採点の結果やエラーの内容) |
「データ」のタブにあるファイルは、次の4つです。
| ファイル | 中身 |
|---|---|
train.zip | 学習データ。中に都道府県ごとの CSV が47個(01.csv が北海道、13.csv が東京都…)入っている |
test.csv | テストデータ。予測するマンションの情報(価格はない) |
sample_submission.csv | 提出ファイルの見本。テストデータと同じ順番で ID が並び、予測の列はすべて 0 |
data_explanation.xlsx | 列の説明 |
提出ファイルと採点のしくみ
提出ファイルの形
提出するのは、sample_submission.csv とまったく同じ形の CSV です。
ID,取引価格(総額)_log
1000000,7.31
1000056,7.02
…
DataDojo の採点は、次の順に確かめます。
- 列の名前と並びが、正解データと完全に同じか(
ID、取引価格(総額)_logの順) - 行の数が同じか(19,466行)
- 同じなら、いちばん右の列を予測として、正解と上から順に比べてスコアを出す
ここで大事なのは、行どうしを ID で結びつけているのではなく、上からの順番で比べていることです。予測を作る途中で行を並べ替えたら、提出の前に sample_submission.csv と同じ順番に戻してください。順番がずれていても形が正しければエラーにはならず、ただスコアがとても悪くなるので、気づきにくいまちがいです。
ほかにも、次の点に気をつけます。
- 列の名前の「()」は全角です。自分で打つとまちがえやすいので、
sample_submission.csvを読み込んで、その列の名前をそのまま使います - 予測に欠損値(空の欄)を入れないでください。数として読めない値があると、正しいスコアが出ません
- pandas の
to_csv(index=False)で書き出します。index=Falseを忘れると、左に番号の列が増えて、列の数が合わなくなります - Excel で開いて保存しなおすと、文字コードが変わって、日本語の列の名前が読めなくなることがあります。pandas で書き出したファイルを、そのまま提出します
評価指標:RMSE
スコアは RMSE(Root Mean Squared Error、二乗平均平方根誤差)です。予測と正解の差を2乗して平均し、平方根をとります。
が正解、 が予測、 がテストデータの件数です。予測が正解に近いほど小さくなり、小さいほど上の順位になります。
このコンペの目的変数は、価格(円)そのものではなく、価格の常用対数()です。1,000万円なら 7、1億円なら 8 になります。そのため、スコアも「対数で測った差」です。たとえば RMSE が 0.1 なら、予測はだいたい 倍、つまり2〜3割くらいずれている、と読めます。このしくみは「評価指標とバリデーションを手で確かめる」のレッスンで、詳しく確かめます。
リーダーボード
- 1人1行で、それぞれのいちばん良いスコアと、提出した回数が出ます
- スコアは、テストデータ全部で計算されます。Kaggle のように、途中の順位(Public)と最後の順位(Private)を別のデータで出すしくみはありません。見えているスコアが、そのまま順位のスコアです
- 名前とスコアを見られるのは、ログインしている人だけです
全部のデータで採点されるので、提出をくり返してリーダーボードのスコアだけを見ながら調整していくと、テストデータにたまたま合った設定を選んでしまいがちです。自分の手元で検証したスコアを信じて改善するのが基本です。これは「スコアを上げる」のレッスンで扱います。
1日の提出は5回まで
提出は、1人1日5回までです。形のまちがいで採点できなかった提出も、1回に数えられます。提出する前に、ファイルの形を手元で確かめておきましょう(下の演習)。
ルール
コンペのルールで、次のことが禁止されています。
- テストデータの正解を、外から手に入れること
- 複数のアカウントで参加すること
- ほかの参加者と、結果(予測の値)を共有すること。コードや手法の共有はかまいません
このコンペのデータは、国土交通省が公開している不動産の取引価格の情報と同じ形をしています。公開されている2020年の取引のデータから価格を探して使うのは、「正解を外から手に入れること」にあたります。手元の学習データだけで勝負してください。
提出する前に形を確かめる
ここからは、提出ファイルの形をコードで確かめます。このページの Python のコードは「▶ 実行」を押すと、ブラウザの中で動きます。上から順に実行してください。
本物のファイルの代わりに、5件だけの小さな見本を作ります。
import io
import pandas as pd
sample_csv = """ID,取引価格(総額)_log
1000000,0
1000056,0
1000081,0
1000106,0
1000130,0
"""
sample = pd.read_csv(io.StringIO(sample_csv))
sample
本物では sample = pd.read_csv("sample_submission.csv") のように、ダウンロードしたファイルを読み込みます。
提出ファイルを確かめる関数を作ります。採点と同じ順で、列・行の数・ID の並び・欠損値を確かめ、見つかった問題をリストで返します。
def check_submission(sub, sample):
problems = []
if list(sub.columns) != list(sample.columns):
problems.append(f"列がちがいます: {list(sub.columns)}(見本は {list(sample.columns)})")
return problems
if len(sub) != len(sample):
problems.append(f"行の数がちがいます: {len(sub)}行(見本は {len(sample)}行)")
return problems
if not (sub["ID"].to_numpy() == sample["ID"].to_numpy()).all():
problems.append("ID の並びが見本とちがいます")
target = sample.columns[-1]
values = pd.to_numeric(sub[target], errors="coerce")
if values.isna().any():
problems.append(f"予測に数として読めない値か欠損値が {values.isna().sum()} 件あります")
return problems
print(check_submission(sample, sample))
見本そのものを渡すと、問題がないので空のリスト [] が返ります。
よくある3つのまちがいを、わざと作って確かめてみます。
target = sample.columns[-1]
# 1. 列の名前のカッコを半角で打ってしまった
bad1 = sample.rename(columns={target: "取引価格(総額)_log"})
# 2. 予測の途中で行が並べ替わった
bad2 = sample.sort_values("ID", ascending=False)
# 3. 予測できなかった行が欠損値のまま
bad3 = sample.copy()
bad3[target] = [7.31, 7.02, None, 6.88, 7.42]
for name, sub in [("bad1", bad1), ("bad2", bad2), ("bad3", bad3)]:
print(name, check_submission(sub, sample))
bad1 の列の名前は、見た目ではほとんど区別がつきません。目で見るより、コードで比べるほうが確かです。
モデルの予測が、次の preds に入っています。列の名前が pred で、行の並びも見本とちがいます。これを、見本 sample と同じ列の名前・同じ ID の並びにそろえた submission を作ってください。値は、それぞれの ID の予測のままにします。
preds = pd.DataFrame({
"ID": [1000130, 1000000, 1000106, 1000056, 1000081],
"pred": [7.42, 7.31, 6.88, 7.02, 7.15],
})
# ここに書く
submission = preds
print(check_submission(submission, sample))
submission解答を見る
見本の ID の並びに、予測を結びつけます。merge を使うと、左の表(見本の ID)の順番のまま、予測の列が付きます。
preds = pd.DataFrame({
"ID": [1000130, 1000000, 1000106, 1000056, 1000081],
"pred": [7.42, 7.31, 6.88, 7.02, 7.15],
})
target = sample.columns[-1]
submission = (
sample[["ID"]]
.merge(preds, on="ID", how="left")
.rename(columns={"pred": target})
)
print(check_submission(submission, sample))
submissionsample[["ID"]] から始めると、行の並びも行の数も見本と同じになります。見本にない ID の予測は入らず、予測がない ID は欠損値になるので、check_submission で気づけます。
本物のデータでは、テストデータを読み込んだ順番のまま予測すれば、test.csv と sample_submission.csv の ID の並びは同じなので、そのまま提出の形になります。それでも、提出の前には毎回この関数で確かめる習慣をつけておくと、5回の提出をむだにせずにすみます。
このコースの進め方
中古マンション価格予測チャレンジには、次の順で取り組みます。
| レッスン | やること | コードを動かす場所 |
|---|---|---|
| 中古マンションのデータを理解する | 列・型・欠損値・目的変数を確かめ、価格と関係のありそうな列を見る | Google Colab |
| 評価指標とバリデーションを手で確かめる | RMSE・MAE の計算、対数の目的変数の読み方、検証のしかた | ブラウザ |
| ベースラインを作って提出する | 前処理をして LightGBM でモデルを作り、submission.csv を提出する | Google Colab |
| スコアを上げる | 特徴量・交差検証・調整・リークの防ぎ方・実験の記録 | Google Colab |
Python の基本は「Python基礎」、pandas は「データ加工集計可視化」、LightGBM のしくみは「機械学習概要」、分析の流れは「機械学習実装」のコースで学べます。分からないところが出てきたら、そちらに戻りながら進めてください。
分からないところがあればこのレッスンについて質問するこのコースの Q&A を見る
