本文へ移動
メニュー

学ぶ

コースロードマップお知らせ

スタアカについて

プラン受講者の声法人の方

会員の方

ログインマイページQ&A(質問と回答)ライトプランの解約クレジットカードの変更

サポート

お問い合わせ

レッスン 1 / 5

DataDojoでコンペに参加しよう

所要時間 30分無料で見られます

学ぶコト

  • データ分析コンペのしくみ(学習データ・テストデータ・評価指標・リーダーボード)
  • DataDojo への登録と、コンペのページの見方
  • 提出ファイルの形と、採点のしくみ(RMSE・1日5回まで)
  • 提出する前に、ファイルの形を確かめる方法

このコースでは、ここまでのコースで学んだデータ分析を、本物のデータ分析コンペで試します。使うのは、スタアカの講師ウマたんが運営している、初心者向けの国産コンペのサイト「DataDojo」です。

このレッスンでは、データ分析コンペとは何かを確かめてから、DataDojo に登録し、データを手に入れて、予測を提出するまでの流れを見ていきます。最後に、提出する前にファイルの形を確かめるコードを、ブラウザの中で動かします。

データ分析コンペとは

データ分析コンペ(コンペティション)は、主催者が出した課題に対して、参加者が予測のモデルを作り、その精度を競う大会です。世界では Kaggle、日本では SIGNATE などが有名です。

どのコンペも、だいたい次の形をしています。

用語意味中古マンションのコンペでは
学習データ答え(目的変数)が付いたデータ。これでモデルを作る2019年までの取引、63万件あまり
テストデータ答えを隠したデータ。これを予測して提出する2020年1〜6月の取引、19,466件
目的変数予測するもの取引価格(総額)の常用対数
評価指標予測の良さを測るものさしRMSE(小さいほど良い)
提出ファイルテストデータの1件ずつに予測を書いた CSVID と予測の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回提出して、自分の名前がリーダーボードに載るところまで進めてみてください。

参加のしかた

  1. コンペの一覧を開く

    コンペティションの一覧を開き、「中古マンション価格予測チャレンジ」を選びます。ログインしなくても、コンペの説明とルールは読めます。

  2. Google アカウントでログインする

    右上の「ログイン」から「Googleで続ける」を押します。ログインすると、利用規約とプライバシーポリシーに同意したことになります。

  3. 表示名を確かめる

    リーダーボードには、Google アカウントの名前とアイコンが出ます。本名を出したくない人は、ログインのあとの「ダッシュボード」で、プロフィールの「編集」から表示名を変えておきましょう。

  4. データをダウンロードする

    コンペのページの「データ」のタブから、4つのファイルをダウンロードします(下の表)。

  5. 予測を作って提出する

    次のレッスンからの手順で 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 の採点は、次の順に確かめます。

  1. 列の名前と並びが、正解データと完全に同じか(ID、取引価格(総額)_log の順)
  2. 行の数が同じか(19,466行)
  3. 同じなら、いちばん右の列を予測として、正解と上から順に比べてスコアを出す

ここで大事なのは、行どうしを ID で結びつけているのではなく、上からの順番で比べていることです。予測を作る途中で行を並べ替えたら、提出の前に sample_submission.csv と同じ順番に戻してください。順番がずれていても形が正しければエラーにはならず、ただスコアがとても悪くなるので、気づきにくいまちがいです。

ほかにも、次の点に気をつけます。

  • 列の名前の「()」は全角です。自分で打つとまちがえやすいので、sample_submission.csv を読み込んで、その列の名前をそのまま使います
  • 予測に欠損値(空の欄)を入れないでください。数として読めない値があると、正しいスコアが出ません
  • pandas の to_csv(index=False) で書き出します。index=False を忘れると、左に番号の列が増えて、列の数が合わなくなります
  • Excel で開いて保存しなおすと、文字コードが変わって、日本語の列の名前が読めなくなることがあります。pandas で書き出したファイルを、そのまま提出します

評価指標:RMSE

スコアは RMSE(Root Mean Squared Error、二乗平均平方根誤差)です。予測と正解の差を2乗して平均し、平方根をとります。

RMSE=1n∑i=1n(yi−y^i)2\mathrm{RMSE} = \sqrt{\frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2}

yiy_i が正解、y^i\hat{y}_i が予測、nn がテストデータの件数です。予測が正解に近いほど小さくなり、小さいほど上の順位になります。

このコンペの目的変数は、価格(円)そのものではなく、価格の常用対数(log⁡10\log_{10})です。1,000万円なら 7、1億円なら 8 になります。そのため、スコアも「対数で測った差」です。たとえば RMSE が 0.1 なら、予測はだいたい 100.1≈1.2610^{0.1} \approx 1.26 倍、つまり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))
submission

sample[["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 のしくみは「機械学習概要」、分析の流れは「機械学習実装」のコースで学べます。分からないところが出てきたら、そちらに戻りながら進めてください。