進捗
0/6
所要 60〜90分 / コードは写経でOK

Kaggle、
とりあえず1周してみる。

アカウント作成 → Notebookでデータに触る → Titanicコンペに初提出。3つの短いコースでKaggleの全体像をつかんだら、3つのボーナス編(野球・音楽・開催中のポケモンAI対戦)で一段深く。順に進めるだけで、Kaggleがどんな場所かの地図が頭に入ります。難しい理論は後回し、まず手を動かしましょう。

🏅 ゴール : Kaggleの称号ラダー

Kaggleには4分野(Competitions / Notebooks / Datasets / Discussions)ごとに称号があります。このラボは一番左「Novice」を卒業して「Contributor」に手が届くまでの地図です。

🌱
Novice
登録しただけ
🚀
Contributor
初提出/初投稿
🥉
Expert
メダル獲得
🥈
Master
複数メダル
🥇
Grandmaster
金メダル常連

🧭 Kaggleを楽しむ・上達する 7つの考え方

テクニックより先に効く"心得"です。どのコースにも通底しているので、迷ったらここに戻ってきてください。

1️⃣
まずベースライン

1行のルールでもいいから"提出を1周"。0点より0.5点。動く土台を先に。

2️⃣
写経で学ぶ

公開Notebookを Copy&Edit → 動かす → 1箇所だけ変える。ゼロから書かない。

3️⃣
検証を信じる

手元の検証スコアで判断。Public LBは一部だけ。順位に一喜一憂しない。

4️⃣
モデルよりデータ

凝ったモデルより、良い特徴量と丁寧な前処理が効く。特に最初は。

5️⃣
小さく速く回す

大改造を一発より、小さな変更を何度も。1変更 = 1提出 = 1メモ。

6️⃣
記録を残す

Descriptionに「何をしてどうなったか」。未来の自分への手紙になる。

7️⃣
完璧を待たない

全部理解してから、ではなく、動かしながら分かる。手が先、理解は後。

コース1
Course 01 · 全体像

Kaggleってどんな場所?

まだコードは書きません。「何ができるサイトなのか」「どこに何があるのか」を先に地図として頭に入れます。ここが分かると、この後の手を動かす作業が一気にラクになります。

1はじめに

そもそも、Kaggleって何?

ひとことで言うと、世界中の人が「同じデータ・同じ問題」に取り組んで、予測の良さを自動採点で競い合ったり学び合ったりできる場所です。2010年創業、2017年からGoogleの傘下。データサイエンス界では知らない人がいないほど定番の存在です。

なぜこんな場所が存在するの?

関わる三者それぞれに"うれしい"があるからです。

  • 課題を出す側(企業・研究者) … 手元の難問とデータを公開すれば、世界中の頭脳が解きにきてくれる。優秀な人材も見つかる。
  • 挑む側(あなた) … 教科書と違って本物のデータが手に入り、提出すればすぐ点数(答え合わせ)が返り、しかも上位者が解法を公開してくれる。独学の3大不足(データ・フィードバック・お手本)が全部そろう。
  • コミュニティ全体 … みんなが解法を共有し合うので、界隈ぜんたいの実力が底上げされていく。
何が画期的?ふつう独学だと「自分のモデル、これって良いの?」が分かりません。Kaggleは共通のテストデータ+自動採点+公開リーダーボードで、誰のモデルが良いかを客観的に比較できるようにした。だから実力が可視化され、家にいながら世界と自分を測れます。
イメージKaggleはデータ分析の「ジム」兼「公式戦の会場」。筋トレ(Learn/Notebook)も、試合(Competitions)も、道場の張り紙(Discussions)も全部そろった総合施設だと思ってください。次のステップから、その中身を見ていきます。
誤解しないで「Kaggle上位=実務も完璧」ではありません。実務ではデータ集めや課題設定のほうが大変だったりします。ただモデリングの筋トレ環境としては世界最高峰。ここで基礎体力をつける、という位置づけです。
2Kaggleを構成する5つの柱

Kaggleは「1つのサイト」に見えて、実は5つの部屋がある

Kaggleを初めて開くと情報が多くて圧倒されますが、機能はざっくり5つに分けられます。これだけ覚えれば迷いません。

🏆
Competitions

企業/研究者がお題とデータを出し、予測精度を競う本丸。賞金付きも。

🗂️
Datasets

誰でも公開・利用できるデータ置き場。巨大なオープンデータ倉庫。

📓
Code (Notebooks)

ブラウザで動くJupyter。無料でGPU/TPUも使える作業場。

💬
Discussions

攻略法・質問・雑談の掲示板。上位者の知見が集まる宝庫。

🎓
Learn

Python/ML/SQLなどの無料ミニ講座。数時間で終わる実践型。

つかみ方Competitionsで課題が出る → Datasetsのデータを → Notebooksで分析して → Discussionsで学び合う → Learnで基礎を埋める」。この循環がKaggleの日常です。
3称号システム

ゲームみたいに「ランク」が上がっていく

Kaggleのモチベの源が称号(Tier)です。Novice → Contributor → Expert → Master → Grandmaster の5段階があり、しかも Competitions / Notebooks / Datasets / Discussions の4分野それぞれ独立して進みます。

  • Contributor になる条件はやさしく、「プロフィール入力・スクリプト実行・コンペ初提出・コメント投稿」など基本操作を一通りやるだけ。このラボのゴールがまさにここです。
  • Expert 以上からは メダル(銅🥉/銀🥈/金🥇) が必要になります。メダルはコンペ順位・Notebookやコメントへの高評価(upvote)で獲得します。
ポイントいきなりメダルを狙う必要はゼロ。まずは「Novice卒業=一通り触った」を目指すのが正解ルートです。
4アカウントを作る

実際に登録してみよう(5分)

ここは実際にブラウザで作業してください。

  1. kaggle.com を開き Register → Googleアカウント等で登録。
  2. プロフィールの表示名を設定(後で変えられます)。
  3. 電話番号認証(Phone Verify) を済ませておく。これで GPU/TPU・インターネット接続・Submit が解禁されます。Settings → Phone Verification から。これをやらないと後のコース2/3で詰まります。
なぜ電話認証?無料でGPUを配っているため、bot対策として本人確認を挟んでいます。1回やれば以後ずっと有効です。

済んだらチェック ✓

5サイトの歩き方

上部メニューだけ覚えれば迷子にならない

画面左上のメニューが5つの部屋の入り口です。最初に触るべき場所はここ:

  • Competitions → 「Getting Started」タブ … 初心者向けの練習用コンペが並ぶ。Titanicはここ。
  • Code(Notebooks) … 自分の作業場。「+ New Notebook」で始める。
  • 公開Notebook … 他人の分析を読む・フォーク(コピー)して改造できる。最強の教材
おすすめ動線気になるコンペを開く → 「Code」タブで人気の公開Notebookを開く → Copy & Edit で自分の環境に複製 → 動かしてみる。写経ならぬ「写Notebook」が上達の近道です。
6理解チェック

1問だけクイズ

Q.「Novice を卒業して Contributor になる」ために最も適切なのは?

正解! Contributorは「基本操作を一通り体験したか」で決まります。メダルが要るのはExpert以上。だからこのラボの3コースを終えれば自然と手が届きます。

コース1 修了 : 地図が頭に入った 🗺️

Kaggleの5つの部屋と称号ラダーが分かりました。次はいよいよ Notebook を開いて、本物のデータに触ります。

クイズに正解し、チェックリストを埋めると押せます
コース2
Course 02 · ハンズオン

Notebookでデータに触れる

ここから手を動かします。Kaggle Notebook上でTitanicのデータを読み込み、中身を眺めて「どんなデータなのか」を感じ取ります。下のコードセルは ▶ Run で出力イメージが見られます。実際は同じコードをKaggle上で動かしてください。

Goal · この先で何をするのか

Titanicチュートリアルのゴールは「418人の生死を当てて提出する」こと

Titanicは「タイタニック号の乗客名簿」を使った練習問題です。答えが載っている891人分のデータから「どんな人が助かったか」の法則を学び、答えが伏せられた418人について 1(生存) / 0(死亡) を予測して、CSVで提出する。提出すると正解率が返ってきて、順位表に自分の名前が載ります。ここまでが1周。モデルの賢さは後回しでOKです。

STEP 01
学ぶ
train.csv(891人・答えあり)を眺め、生死を分けた手がかりを見つける ← コース2
STEP 02
予測する
test.csv(418人・答えなし)の1人ずつに 1 か 0 を付ける ← コース3
STEP 03
提出する
2列だけのCSVを Submit → 正解率(スコア)が出て順位表に載る ← コース3

配られる3つのファイルの意味

コンペページの Data タブに置かれているのはこの3つだけ。役割がまったく違うので、ここで押さえておくと迷いません。

ファイル 中身 大きさ 役割(学校でいうと)
train.csv 乗客の情報 + Survived列(答え)
名前・性別・年齢・客室クラス・運賃など
891行 × 12列 答え付きの問題集
これを読んで法則を学ぶ
test.csv 乗客の情報のみ (Survived列がない)
train と同じ項目から答えの列だけ抜いたもの
418行 × 11列 本番の試験問題
この418人の生死を当てる
gender_submission.csv PassengerIdSurvived の2列だけ
「女性は全員生存」と仮に埋めたサンプル
418行 × 2列 解答用紙の見本
この形式に合わせて自分の予測を出す

📋 中に入っている12個の列それぞれの意味は、下のステップ3に早見表があります。

つまり答え(Survived)は train.csv にだけある。 test.csv の答えはKaggleだけが持っていて、提出すると照合してスコアを返してくれる——この仕組みがコンペの正体です。gender_submission.csv はそのまま提出してもスコアが出ます(約0.765)。まず一度出してみるのもおすすめ。

先に知っておくと霧が晴れる用語

教師あり学習Supervised Learning

答え付きのデータから法則を学ばせるやり方。Titanicはまさにこれで、train.csv の Survived が「教師(答え)」にあたります。答えのないデータからグループ分けする教師なし学習と対になる言葉。

二値分類Binary Classification

答えが 0 か 1 の2択である問題。生存/死亡、スパム/非スパム、クリックする/しない など。Titanicは二値分類の入門教材です。(家の値段のように連続した数値を当てる場合は回帰と呼びます)

目的変数 と 特徴量target / features

当てたい列(Survived)が目的変数(ターゲット)、手がかりに使う列(Sex, Pclass, Age …)が特徴量(説明変数)。「どの列を特徴量に選ぶか」がスコアを大きく左右します。

正解率Accuracy

418人のうち何人当てられたかの割合。Titanicの採点はこれ一本です。全員を「死亡」と答えても約0.62出るので、0.62を下回ったら何かがおかしいという目安にもなります。

📍 そもそもデータ分析はどんな順番で進めるのか(前処理・評価・過学習…)をまとめて知りたい人は → 機械学習の地図(座学・G検定の下地)

1Notebookとは

ブラウザで動くJupyter。環境構築ゼロ。

Kaggle Notebookは、PCに何もインストールせずPythonが動く作業環境です。pandasやscikit-learnなど主要ライブラリは最初から入っています。

  • 無料でGPU/TPUが使える(週あたり数十時間の枠)。ディープラーニングもここで回せます。
  • データが隣にあるのが最大の利点。コンペやDatasetのデータをボタン一つで /kaggle/input/ に接続でき、パス管理で悩みません。
セルとはNotebookは「セル」という箱の集まり。コードを書いて Shift+Enter で実行 → すぐ下に結果が出る。この即時フィードバックが分析を速くします。
2Notebookを作ってデータを繋ぐ

Titanicデータをアタッチする

  1. Titanicコンペ(kaggle.com/c/titanic)を開き Join Competition → 規約に同意。
  2. コンペページの Code タブ → + New Notebook。これでTitanicデータが自動で接続された状態で始まります。
  3. 右パネルの Inputtitanic があり、train.csv / test.csv / gender_submission.csv が見えればOK。
TitanicコンペのOverviewページ。上部にOverview・Data・Code・Leaderboard・Rules・Submissionsのタブが並び、右上にSubmit Predictionボタンがある
実際の画面Titanicコンペのトップ(Overview)。上部のタブが行き先のすべてです——データを見るなら Data、Notebookを作るなら Code、順位を見るなら Leaderboard、提出履歴は Submissions。右上の Submit Prediction が提出ボタンです。右側に「Knowledge / メダルなし」「Binary Classification · Tabular · Beginner」とあるのが練習用コンペである証。上部の「rolling leaderboard」の注記も、Titanicならではの仕様です。
3つのファイルの役割(再掲)train.csv=答え(Survived)付きの学習用 / test.csv=答えなし、この418人の生死を当てる / gender_submission.csv=提出フォーマットの見本。詳しくはこのページ冒頭の「ゴール」ボードを参照。
最重要 : パスはまず自分で確認データの置き場所(パス)はNotebookの作り方で変わります。コンペのCodeタブから作ると /kaggle/input/titanic/…、空Notebookに後から Add すると /kaggle/input/competitions/titanic/… のように competitions/ が挟まることも。だから決め打ちせず、まず下のコードで実際の場所を確かめるのが鉄則です。
 
import os
for d, _, files in os.walk("/kaggle/input"):
    for f in files:
        print(os.path.join(d, f))
表示されたパスをそのまま使えばOK。何も出なければデータ未接続なので、右パネル + Add InputCompetitions タブで「Titanic」を追加してください。
3データを読み込む

まずは表として開いてみる

pandasでtrain.csvを読み込みます。パスは環境で変わるので、候補から実在するものを自動で選ぶ形にしておくと安全です。

In [1]:
import pandas as pd, os

# データの場所を自動判定(どちらの作り方でもOK)
for BASE in ["/kaggle/input/titanic",
             "/kaggle/input/competitions/titanic"]:
    if os.path.exists(f"{BASE}/train.csv"):
        break
print("BASE =", BASE)

train = pd.read_csv(f"{BASE}/train.csv")
train.head()
Out[1]:
BASE = /kaggle/input/titanic
PassengerId Survived Pclass Sex Age Fare Embarked
0 1 0 3 male 22.0 7.25 S
1 2 1 1 female 38.0 71.28 C
2 3 1 3 female 26.0 7.92 S
3 4 1 1 female 35.0 53.10 S
4 5 0 3 male 35.0 8.05 S
※ Name, Ticket, Cabin, SibSp, Parch 列は省略表示

Survived列が答え(1=生存/0=死亡)。この列を、test.csv側で予測するのがゴールです。

データフレームDataFrame · pandas

pandasが扱う表形式のデータのこと。Excelのシートに近い感覚で、1行=1件のデータ(ここでは乗客1人)1列=1つの項目です。1行をレコード / サンプル、1列をカラム / 特徴量と呼びます。

head() は先頭5行、tail() は末尾5行、info() は列の型と欠損の有無をざっと見るための定番メソッド。

12個の列(カラム)の意味 早見表

Titanicのデータは全部で12列。「何の列があるのか」を一度眺めておくと、この先の作業がぐっと速くなります。欠損数は train.csv(891行) / test.csv(418行) の実際の数です。

列名 日本語 中身 欠損 train / test 使いどころ
PassengerId 乗客ID 1から順に振られた通し番号。中身に意味はない 0 / 0 予測には使わない。提出CSVの1列目に必要な"名札"
Survived 生存したか 1 = 生存 / 0 = 死亡 0 / 列ごと無い これが答え(目的変数)。test.csv には存在せず、当てにいく対象
Pclass チケットの等級 1 = 1等 / 2 = 2等 / 3 = 3等 0 / 0 実質的な社会階級の代わり。生死を強く分ける主力の特徴量
Name 氏名 Braund, Mr. Owen Harris の形式 0 / 0 そのままでは使えないが、敬称(Mr/Mrs/Miss/Master)を抜き出すと強い特徴量になる
Sex 性別 male / female 0 / 0 いちばん効く特徴量。文字列なので0/1に変換して使う
Age 年齢 小数のものは推定値(例: 0.42 は生後5か月、28.5 は推定28歳前後) 177 / 86 効くが欠損が多い。中央値などで補完してから使うのが定番
SibSp 兄弟姉妹・配偶者の数 同乗している Siblings + Spouses の人数 0 / 0 単独では弱い。Parchと足すと家族の規模が分かる
Parch 親・子の数 同乗している Parents + Children の人数 0 / 0 同上。子連れかどうかの手がかり
Ticket チケット番号 A/5 21171, 113803 など表記がバラバラ 0 / 0 扱いが難しく最初は捨ててよい。同じ番号=同行者、という使い方もある
Fare 運賃 支払った金額(ポンド) 0 / 1 Pclassと連動するが、同じ等級内の"羽振りの良さ"も表す
Cabin 客室番号 C85, B28 など。頭文字はデッキ 687 / 327 約8割が欠損。最初は列ごと捨てるのが定石(「記録がある=上等客」として使う手も)
Embarked 乗船した港 C = シェルブール(仏) / Q = クイーンズタウン(愛) / S = サウサンプトン(英) 2 / 0 港によって客層が違うため、そこそこ効く。最頻値のSで補完するのが定番
まず覚えるのは4つだけSurvived(答え) / Sex / Pclass / Age。コース3で最初に作るモデルもこの周辺しか使いません。残りは慣れてから拾えば十分です。
よくある"作られる"列元の列を組み合わせて新しい列を作るのが特徴量エンジニアリング。Titanicの定番は3つ。
FamilySize = SibSp + Parch + 1(自分を足して家族の人数)
IsAlone(FamilySizeが1なら1)
Title(Nameから Mr / Mrs / Miss / Master を抽出)
4データを眺める

「形」と「欠け」と「傾向」を見る

分析の第一歩は決まっています。大きさ・欠損・分布を確認すること。この「いきなりモデルを作らず、まずデータを眺める」作業には名前があります——EDA(探索的データ分析)です。

EDA / 探索的データ分析Exploratory Data Analysis

モデルを作る前に、データを集計したりグラフにしたりして「これはどんなデータなのか」の当たりをつける工程。このページでやっている「形」「欠け」「傾向」を見る作業がまさにEDAです。

Kaggleの公開Notebookに Titanic EDA のようなタイトルが 異常に多いのはこのため。上位者ほどEDAに時間をかけます。

📍 EDAが分析全体のどこに位置するのか、前処理や評価との関係は → 機械学習の地図(座学)

この教材の言い方 正式には 使うコード
データの形状(行数×列数=サンプル数と特徴量数) df.shape
欠け 欠損値の確認(Missing Value / NaN) df.isnull().sum()
傾向 分布グループ集計(層別集計)による関係の把握 df.describe() / df.groupby(...)
In [2]:
# 行数・列数と、欠損値の数を確認
print(train.shape)
print(train.isnull().sum())
Out[2]:
(891, 12) Age 177 Cabin 687 Embarked 2 その他の列 0 dtype: int64

891人分・12列。Ageが177件、Cabinが687件も欠けています。「Cabinは欠けすぎだから捨てる」「Ageは埋める」といった判断がここから生まれます。

欠損値Missing Value / NaN

記録が無い空欄のこと。pandasでは NaN と表示されます。多くのモデルは欠損値があると学習できないので、EDAで必ず数え、「列ごと捨てる」か「何かで埋める」を決めます。

埋める作業は欠損補完(Imputation)。中央値・平均値で埋めるのが定番で、コース3では Age を中央値で補完します。

前処理Preprocessing

欠損を埋める・文字列(male/female)を数値に変換する など、データをモデルに入れられる形に整える工程の総称。分析作業の体感8割はここです。

次に「生存率の傾向」を見る

In [3]:
# 性別ごと・客室クラスごとの生存率
print(train.groupby("Sex")["Survived"].mean())
print(train.groupby("Pclass")["Survived"].mean())
Out[3]:
Sex female 0.742 ← 女性の約74%が生存 male 0.189 ← 男性は約19% Name: Survived Pclass 1 0.630 ← 1等客 2 0.473 3 0.242 ← 3等客 Name: Survived
読み取れた物語「女性・子ども・1等客が優先的に助かった」。Sex と Pclass が生死を強く分ける——これが次のコースで作るモデルの土台になります。EDA(探索的データ分析)とはこの"物語探し"のことです。
グループ集計 / 層別集計groupby · aggregation

ある列で仲間分けしてから平均などを取る手法。groupby("Sex")["Survived"].mean() は「性別で分けて、それぞれの生存率を比べる」という意味です。2つの列で表にする場合はクロス集計(pd.crosstab)。

「AとBで結果が違う」を見つける最短の道具。EDAの主力です。

記述統計Descriptive Statistics

平均・中央値・標準偏差・最大最小などでデータの姿を数字に要約すること。pandasなら train.describe() の1行で主要な数値がまとめて出ます。ヒストグラムを描いて分布を見るのも同じ目的。

5理解チェック

1問クイズ

Q.train.isnull().sum() を実行する目的は?

正解! 欠損の量を知ると「捨てる/埋める」の判断ができます。Cabinのように7割欠ける列は使いにくく、Ageのように一部欠ける列は中央値などで補完する、という定石につながります。

コース2 修了 : データと会話できた 📊

Notebookでデータを開き、欠損と傾向を読み取りました。「女性・1等客ほど生存」という手がかりも掴めました。次はこれを使って予測モデルを作り、初提出します。

クイズに正解し、全コードセルを Run すると押せます
コース3
Course 03 · 初提出

初めてのコンペ提出

いよいよ本番。予測結果のCSVを作ってTitanicコンペに提出し、リーダーボードに自分のスコアを載せます。これが終われば Contributorへの一歩です。

ゴールのおさらい : test.csv にいる418人それぞれに 1(生存)/0(死亡) を付け、PassengerId, Survived の2列CSVとして提出する。返ってくるスコアは正解率(Accuracy)

1コンペの仕組み

「予測CSVを出す → 採点される」だけ

コンペの流れは驚くほどシンプルです。

  • train.csv(答えあり)でモデルを学習する。
  • test.csv(答えなし)の各乗客について生死を予測する。
  • 予測を submission.csv の形式で書き出し、Submit する。
  • Kaggleが正解と照合してスコア(Titanicは正解率=Accuracy)を返し、リーダーボードに順位が出る。
Public と Privateコンペ中に見えるスコアはテストの一部だけで計算したPublic LB。最終順位は残りで計算するPrivate LBで決まります。「Public だけに合わせすぎる=過学習」で最終日に順位が入れ替わる"Shake up"が起きるのはこのため。Titanicの練習では気にしすぎなくてOK。

提出フォーマットはこの2列だけ:

 
PassengerId,Survived
892,0
893,1
894,0
...
2まずは超シンプルなベースライン

「女性なら生存」ルールだけで出してみる

コース2で「女性の生存率74%」と分かりました。まずは機械学習すら使わず、女性=1, 男性=0 と決め打ちで提出してみます。目的はスコアより「提出の流れを1周する」こと。(コース2と同じNotebookの続きなら BASE は再利用できます。別Notebookなら下の1〜3行目で再設定)

In [1]:
import pandas as pd, os

for BASE in ["/kaggle/input/titanic", "/kaggle/input/competitions/titanic"]:
    if os.path.exists(f"{BASE}/test.csv"): break

test = pd.read_csv(f"{BASE}/test.csv")

# 女性(female)なら1、それ以外は0
pred = (test["Sex"] == "female").astype(int)

sub = pd.DataFrame({
    "PassengerId": test["PassengerId"],
    "Survived": pred
})
sub.to_csv("submission.csv", index=False)
print("saved:", sub.shape)
Out[1]:
saved: (418, 2)

418人分の予測が入った submission.csv が作れました。このルールだけで 正解率 約0.765 出ます。侮れません。

ベースラインBaseline

一番シンプルな方法で先に出しておく基準スコアのこと。今回の「女性なら生存」ルールがそれです。これがあると、その後の改良が 本当に効いたのかを比べられるようになります。

凝ったモデルを作ったのにベースラインを超えない、はよくある話。だからKagglerは必ず最初に低コストな1本を提出します。

3ちょっと賢くする

scikit-learnで機械学習モデルを作る

次はランダムフォレストで、複数の手がかり(客室クラス・性別・年齢・運賃など)を組み合わせて予測します。前処理は最小限に。

決定木 と ランダムフォレストDecision Tree / Random Forest

決定木は「性別は?→女性→客室は?→1等→生存」のように質問を枝分かれさせて答えに辿り着くモデル。1本だと当てずっぽうに寄りやすいので、少しずつ違う木を何百本も作って多数決を取るのがランダムフォレストです。

n_estimators=200 は「木を200本作る」という意味。表形式データで最初に試す定番。

学習 と 推論fit / predict

model.fit(X, y)学習——特徴量Xと答えyを見せて法則を覚えさせる工程。model.predict(...)推論(予測)——覚えた法則を使って未知のデータに答えを出す工程。scikit-learnはどのモデルでもこの2つの名前で統一されています。

In [2]:
from sklearn.ensemble import RandomForestClassifier

train = pd.read_csv(f"{BASE}/train.csv")
features = ["Pclass", "Sex", "Age", "Fare"]

def prep(df):
    df = df.copy()
    df["Sex"] = (df["Sex"] == "female").astype(int)   # 文字→数値
    df["Age"]  = df["Age"].fillna(df["Age"].median())   # 欠損を中央値で補完
    df["Fare"] = df["Fare"].fillna(df["Fare"].median())
    return df[features]

X = prep(train)
y = train["Survived"]

model = RandomForestClassifier(n_estimators=200, random_state=0)
model.fit(X, y)
print("train accuracy:", round(model.score(X, y), 3))
Out[2]:
train accuracy: 0.902
注意train accuracy 0.90は「学習データ上の点数」。本番(test)ではもう少し下がります。この差が過学習のサイン。「学習で高い=本番で高い」ではないのがMLの肝です。
過学習Overfitting

学習データを丸暗記してしまい、未知のデータに弱くなる状態。過去問の答えだけ覚えて本番で解けない受験生と同じです。「学習データの点数だけ異常に高い」ときは疑ってください。

検証データ と 交差検証validation / cross validation

過学習を見抜くために、train.csv の一部をわざと学習に使わず採点用に取っておくのが検証データ。分け方を変えて何回も試し平均を取るのが交差検証(CV)です。

提出は1日10回までなので、Kagglerは手元のCVスコアを頼りに改良を進めます。sklearn.model_selectiontrain_test_split / cross_val_score が入口。

📍 正則化・バイアス/バリアンス・評価指標まで通しで知りたい → 機械学習の地図(座学)

test を予測して submission を書き出す

ここが「答えを作る」工程です。やっていることは4つだけ。

  1. 答えのない418人を読み込む(test.csv)。
  2. 学習時とまったく同じ前処理をかける(prep())。ここが最重要で、Sexを0/1に、Ageを中央値で補完——を test にも同じように適用しないと、列の形が合わずモデルが受け付けません。
  3. 学習済みモデルに0/1を出させる(model.predict())。418個の予測が返ります。
  4. PassengerId と並べて2列のCSVに保存する(to_csv())。これが提出物。
In [3]:
test = pd.read_csv(f"{BASE}/test.csv")
pred = model.predict(prep(test))

sub = pd.DataFrame({
    "PassengerId": test["PassengerId"],
    "Survived": pred
})
sub.to_csv("submission.csv", index=False)
print("done!")
sub.head(3)
Out[3]:
done!
PassengerId Survived
0 892 0
1 893 1
2 894 0

「submission」が3回出てくるけど、どれが何?

ここで一度つまずきやすいので整理します。名前は似ていますが別物が3つあります。

どれ 置き場所 誰が作った 中身
gender_submission.csv /kaggle/input/titanic/
読み取り専用
Kaggle(主催者) 「女性は全員生存」で埋めた書き方の見本。あなたの答えではない
submission.csv
ステップ2
/kaggle/working/ あなた 女性ルールで作った予測 418行
submission.csv
ステップ3(今ここ)
/kaggle/working/ あなた ランダムフォレストの予測 418行。ファイル名が同じなので、ステップ2の中身は上書きされて消えます
見本は書き換えられない/kaggle/input/ の中は読み取り専用で、編集も削除もできません。to_csv("submission.csv") は、Notebookの作業フォルダ /kaggle/working/自分のファイルを新しく作る動作です。見本の gender_submission.csv はそのまま残ります。
両方を残して比べたいときは2回目を sub.to_csv("submission_rf.csv", index=False) のように別名で保存すればOK。Output に2つ並び、提出時にどちらを出すか選べます。
なお行数(418行)と列(PassengerId, Survived)はどちらも同じで、変わるのは Survived の 0/1 の並びだけです。

で、精度は結局いくつなの?

この時点では分かりません。test.csv の正解はKaggleだけが持っているので、提出して初めて採点されます。 混同しやすい3つの数字を並べておきます。

数字 意味 いつ分かる 目安 信頼度
train accuracy 学習に使った891人を、そのまま採点した点数 手元ですぐ ≈ 0.90 甘い。丸暗記した分が乗るので当てにならない
CVスコア
交差検証
trainの一部をわざと学習に使わず採点する、を分け方を変えて繰り返した平均 手元で、提出前に ≈ 0.80 本番に近い。改良が効いたかの判断はこれで行う
Public LB スコア test.csv の一部に対する本当の正解率 提出した数十秒後 ≈ 0.77 本番。ただしテストの一部だけで計算された値

提出は1日10回までという上限があるので、思いつきを全部提出して確かめる、はできません。だから手元のCVスコアで見込みを立ててから提出するのが定石です。CVは次の3行で測れます。

 
from sklearn.model_selection import cross_val_score

scores = cross_val_score(model, X, y, cv=5, scoring="accuracy")
print("CV accuracy:", round(scores.mean(), 3), "±", round(scores.std(), 3))
out
CV accuracy: 0.812 ± 0.028

(実際の値は乱数やライブラリのバージョンで少し前後します) train 0.90 → CV 0.81 → 本番 0.77 と下がっていくのが普通です。この下がり幅が過学習の大きさで、差が小さいほど素直なモデル。手元の数字がそのまま本番の点数になることはない、と覚えておいてください。

4提出してスコアを見る

Submit してリーダーボードに載る

  1. Notebook右上の Save Version でNotebookを実行保存(Save & Run All)。
  2. 実行が終わると、もう一度生成された submission.csv が、そのバージョンの Output に現れる。
  3. コンペページの Submit Prediction、またはNotebookのOutputから直接 Submit
  4. 数十秒でスコアが表示され、Leaderboard に自分の名前が載る 🎉

「もう作ったのに、また submission.csv が作られるの?」

はい、作られます。ただし新しいファイルが増えるのではなく、まっさらな環境で作り直された2回目です。Kaggle Notebookには実行される場所が2つあるためです。

編集中のセル実行 Save Version の実行
きっかけ を押したとき Save Version を押したとき
環境 いま開いている作業セッション 新しい空のコンテナ(ゼロから起動し直す)
実行範囲 押したセルだけ 上から下まで全セル
できた submission.csv 作業セッションの中だけに存在 そのバージョンに保存され、提出に使えるのはこちら
Save Versionで保存されたNotebookの画面。Notebook・Input・Output・Logs・Comments・Settingsのタブと、右側にVersion 1 of 1、Runtime、Inputの表示がある
実際の画面Save Version で保存したあとの画面。上部のタブに注目してください——Notebook(コード) / Input(読み込んだデータ) / Output(実行して生成されたファイル) / Logs(実行ログ)。さきほど to_csv で作った submission.csv は、この Output タブの中に入ります。右側の Version 1 of 1 が保存されたバージョン、Runtime 27s が全セルを頭から流し直すのにかかった時間、Input に Titanic コンペが繋がっていることも読み取れます。エラーで落ちたときは Logs タブに原因が出ます。
つまり2回作られる1回目はあなたが編集中に を押したとき、2回目は Save Version が全セルを頭から流し直したとき。提出に使われるのは2回目のほうです。中身が同じコードなら結果も同じなので、心配は要りません。
だから起きる"あるある"Save Version は上から順に全部実行します。編集中に行ったり来たりしてセルを動かしていると、「編集中は動いたのに Save Version で落ちる」が起こります(後から消したセルで定義した変数を使っている、など)。保存の前に一度 Run All で通しておくと安全です。
Save & Run All (Commit) = 全セル再実行。時間はかかるが確実で、基本はこちら。Quick Save = 再実行せず今の状態のまま保存。
Notebookを経由しない道もあるOutput から submission.csvダウンロードして、コンペページの Submit Prediction に直接アップロードしてもOK。手元のPCで作ったCSVを出したいときはこちらになります。
目安スコア女性ルール ≈ 0.765 / このランダムフォレスト ≈ 0.77〜0.78。Titanicは0.77前後が初心者の標準ライン。0.80超えは特徴量エンジニアリング(敬称Mr/Mrsの抽出、家族人数など)で狙えます。スコアの絶対値より「1周できたこと」が今日の成果です。
特徴量エンジニアリングFeature Engineering

元の列をそのまま使うのではなく、予測に効く新しい列を人間が作り出す作業。Titanicなら「Nameから敬称(Mr/Mrs/Miss/Master)を取り出す」「SibSp+Parch+1で家族人数を作る」が定番で、これだけでスコアが0.80前後まで伸びます。

モデルを豪華にするより効くことが多く、コンペの勝敗を分けやすいのはこことよく言われます。

「Version name」と「Description」に何を書く?

提出の途中で入力欄が2つ出てきて戸惑いがちなので、役割を整理します。どちらも必須ではなく空でも提出できますが、書く習慣をつけると上達が速くなります。

  • Version name(Save Version時) … そのNotebook保存版につける自分用のラベル。空なら日時が自動で入る。何度も改良するので rf-baseline / v2 Age追加 のような短い目印にしておくと後で見分けやすい。
  • Description(Submit時) … 「このスコアは何をした結果か」のメモ。提出履歴にスコアと並んで残るので、「0.77のやつ何やったっけ?」を防げる。これが改善ループの生命線
Descriptionの書き方例凝らなくてOK。「手法+使った特徴量+効いた工夫」を一行で十分です。
女性ルール baseline
RandomForest, 特徴量=Pclass/Sex/Age/Fare, Age=中央値補完
v3: 敬称(Mr/Mrs)を特徴量に追加

提出したあと、スコアと順位はどこを見る?

「数十秒でスコアが出る」と言われても、どの画面を見ればいいのか分かりにくいところです。見る場所はこの3つだけ。上から順に辿れば必ず自分のスコアに行き着きます。

1
提出直後の採点画面いちばん速い
Submit を押すと自動で採点画面に移ります。「Submitting…」→「Scoring…」と表示が変わり、数十秒すると Public Score の数字がその場に表示されます。同じ画面にある View my position on the leaderboard を押せば、自分の行まで一発で飛べます。
※ 待っている間にページを閉じても採点は続きます。閉じてしまったら次の 2 を見てください。
2
My Submissions(自分の提出履歴)あとから確認するならここ
コンペページ右上の Submissions提出が新しい順に並び、1行ずつに Score / Description / 日時 / ステータスが出ます。「0.77のやつ、何をした提出だっけ?」を確認する場所。
直リンク kaggle.com/competitions/titanic/submissions
3
Leaderboard(順位表)
コンペページ上部のタブ Overview · Data · Code · Discussion · Leaderboard · Rules から。参加者は数万人いるので上からスクロールして探さないことページ上部の検索欄に自分のユーザー名を入れる(または Jump to your leaderboard position)と、自分の行だけが表示されます。下の画像がその状態です。
直リンク kaggle.com/competitions/titanic/leaderboard
TitanicコンペのLeaderboardページ。検索欄でユーザー名を絞り込み、自分の行が順位10339位・スコア0.74880として表示され、下に採点結果のウェルカムメッセージが出ている
実際の画面Leaderboard で自分の行を見つけたところ検索欄に自分のユーザー名を入れるのが、数万人の中から自分を探す一番早い方法です。行には 順位(#) / チーム名 / スコア / 提出回数(Entries) / 最終提出(Last) が並びます。
下の吹き出しがKaggleからのメッセージで、「Your score represents your submission's accuracy(スコアはあなたの提出の正解率です)」と書かれています。0.74880 なら、418人中およそ75%を当てたという意味。上部の「This leaderboard is calculated with all of the test data」は、Titanicがテストデータ全体で採点する練習用コンペであることを示しています。

My Submissions はこんな見え方になります(イメージ)

Submission and Description Submitted Public Score Status
submission.csv
RandomForest, 特徴量=Pclass/Sex/Age/Fare
2 minutes ago 0.77511 Complete
submission.csv
女性ルール baseline
an hour ago 0.76555 Complete
スコアが出ない / エラーになったらStatus が Submission Scoring Error になったら、中身の形式ミスです。行数が418か列名が PassengerId と Survived か欠損(NaN)が混じっていないかを確認してください。Notebookで sub.shape(→ (418, 2))と sub.isnull().sum()(→ すべて0)を見れば一発で分かります。
Titanicの順位表は少し特殊Titanicは常時再計算されるrolling leaderboardで、表示されるのは Publicスコアのみ。通常のコンペのように「最終日にPrivateスコアで順位が入れ替わる」ことはありません。練習用コンペならではの仕様です。

できたらチェック ✓

5次の一歩

Novice卒業後、どう伸ばす?

  • 公開Notebookをフォークして改造。人気Notebookを Copy & Edit → 1行変えて再提出。これが最速の学習ループ。
  • 他のGetting Startedコンペへ。House Prices(住宅価格予測=回帰)、Spaceship Titanicなど。
  • Learnコースの "Intro to Machine Learning" → "Intermediate ML" を1本。数時間で地力が付きます。
  • Discussionを読む/コメントする。上位者の解法解説はタダの宝。コメント投稿もContributor条件のひとつ。

Q.提出後、スコアをさらに上げる現実的な次の一手は?

正解! 特徴量エンジニアリングと、公開Notebookからの学習が王道。ちなみに提出回数には1日あたり上限があり、testの答え探しは規約違反です。

コース3 修了 : 初提出、完了 🚀

データを読み、モデルを作り、コンペに提出してリーダーボードに載る——Kaggleの1サイクルを丸ごと体験しました。ここまでで基礎は完了。もう一段、分析の面白さを味わうなら「野球データ編」へ。

両クイズに正解し、全コードセルを Run すると押せます
ボーナス · 野球編
Bonus · Moneyball

野球データで"割安な価値"を探す

基礎はもう身についています。ここでは別テーマで分析の面白さを。テーマは映画にもなったマネーボール——2002年、貧乏球団オークランド・アスレチックスは「データで過小評価された価値」を見つけて勝ちまくりました。同じ問いを150年ぶんのMLBデータに投げかけます。

Goal · この先で何をするのか

このコースのゴールは「データで"通説"を検証する」こと

提出もスコアもありません。ここはコンペではなく、公開データ(Dataset)を使った自由分析です。150年分のMLB記録から、2つの問いに自分の手で答えを出します。Titanicが「予測して当てる」練習だったのに対し、こちらは「集計して読み解く」練習。Kaggleでやることの、もう半分がこれです。

問い 01
得点を生むのは打率? 出塁率?
相関係数でどちらが得点(R)と強く連動するかを比べる ← ステップ3〜4
問い 02
得失点から勝ち星は当たる?
ピタゴラス勝率という経験則を、実データで検算する ← ステップ5
仕上げ
Notebookを公開する
分かったことを書いて Publish。これもContributorの条件のひとつ ← ステップ6

Titanic(コース2・3)とは、そもそも種類が違う

Titanic = Competition 野球編 = Dataset
データの出どころ コンペページの Data タブ 誰かが公開した Dataset(Lahman Baseball Database)
ゴール 答えのない行を予測して提出する 問いに答えを出して考察する
提出物 submission.csv なし(Notebookを公開するだけ)
採点 Kaggleが自動採点してスコアを返す 自分で解釈する。正解は用意されていない
主な道具 モデル(ランダムフォレストなど) 集計・相関・可視化。モデルは使わない
これも立派なKaggleKaggleには Competitions / Notebooks / Datasets / Discussions の4分野があり、称号もそれぞれ別。「順位を競わない分析Notebook」も評価される場所です。むしろ実務のデータ分析は、こちらのスタイルの方が近いくらいです。

先に知っておくと読みやすい用語

相関係数Correlation Coefficient · r

2つの数値がどれくらい一緒に動くか-1 〜 +1 で表した数字。+1に近いほど「片方が増えるともう片方も増える」、-1に近いほど逆、0なら無関係。pandasでは df["A"].corr(df["B"]) の1行で出せます。

正確にはピアソンの積率相関係数といい、直線的な関係だけを測ります。曲線的な関係は捉えられないので、必ず散布図も併せて見るのが作法です。

ドメイン知識Domain Knowledge

対象分野そのものの知識(ここでは野球)。「出塁率という指標を作ろう」「1961年以降に絞ろう」という発想は、統計の知識ではなく野球を知っているから出てくるものです。

良い特徴量はドメイン知識から生まれる——Kaggleでも実務でも、これが最終的に効いてきます。データサイエンティストが業務担当者と組む理由もここ。

1お題

問い : 得点を生むのは打率か、出塁率か

チームがたくさん得点(R)するために本当に効くのは、有名な打率(AVG)なのか、当時あまり注目されなかった出塁率(OBP)なのか。もし「OBPの方が得点に効くのに市場は打率にお金を払っている」なら、そこに割安な勝ち筋があります。これがマネーボールの発想です。

もう1問、「得点と失点から勝ち星は予測できるか?」にも挑戦。野球で最も美しい経験則、ピタゴラス勝率を自分の手で確かめます。

使う指標(ここだけ用語)
R / RA
得点 / 失点
AVG
打率 = H / AB
OBP
出塁率 = 塁に出た割合
W
勝利数
2データ接続

Lahmanデータを繋いで読み込む

  1. 新規Notebookで右パネル + Add InputDatasets タブで Lahman Baseball Database を検索して追加。(kaggle.com/datasets/dalyas/lahman-baseball-database)
  2. 接続すると /kaggle/input/…/Teams.csv など多数のCSVが現れます。今日の主役はチーム×シーズンの成績表 Teams.csv
In [1]:
import pandas as pd

teams = pd.read_csv("/kaggle/input/lahman-baseball-database/Teams.csv")
print(teams.shape)
teams[["yearID","teamID","W","R","RA","AB","H","BB"]].tail()
Out[1]:
(3015, 48)
yearID teamID W R RA AB H BB
3010 2024 SDN 93 760 676 5497 1390 484
3011 2024 SEA 85 676 642 5479 1250 530
3012 2024 SFN 80 674 696 5484 1329 498
3013 2024 TBA 80 604 662 5389 1269 522
3014 2024 TOR 74 671 729 5519 1382 486

1行 = 「あるチームのある年」。列は48もありますが、今日使うのはほんの数個です。

今日使う列(カラム)の意味 早見表

48列すべてを覚える必要はありません。この10個だけ分かれば、このコースは最後まで走れます。野球用語がそのまま列名になっているのがポイントです。

列名 読み 意味 使いどころ
yearID シーズン(西暦) 時代を絞り込むのに使う
teamID チームの略号(NYA=ヤンキース など) チームの識別
G Games その年の試合数(通常162) 短縮シーズンを除外する条件に使う
W / L Wins / Losses 勝利数 / 敗戦数 問い2の答え合わせの対象
R Runs そのチームが取った得点 問い1の的(まと)。何と強く連動するかを調べる
RA Runs Allowed 取られた失点 ピタゴラス勝率の材料
AB At Bats 打数(四球などを除いた"打った回数") 打率の分母
H Hits 安打数 打率の分子 / 出塁率の材料
BB Base on Balls 四球(フォアボールで歩いた数) 打率には一切入らないが、出塁率には入る。今日の主役
HBP Hit By Pitch 死球(デッドボール) 出塁率の材料
SF Sacrifice Fly 犠牲フライ 出塁率の分母の調整に使う
ここが今日の核心打率(AVG)は H / AB なので、四球(BB)で塁に出ても打率は1ミリも上がりません。でも塁に出れば得点は生まれる。この「打率が見落としているもの」を拾いにいくのが出塁率(OBP)で、マネーボールの出発点です。
Lahmanには他にもファイルがあるTeams.csv(チーム×年)のほか、Batting.csv(選手×年の打撃成績)、Pitching.csv(投球成績)、People.csv(選手の基本情報)、Salaries.csv(年俸)など。Salaries と Batting を繋げば「1出塁あたりいくら払っているか」が出せる——これが映画で球団がやっていたことそのものです。
3指標を作る

打率と出塁率を自分で計算する

OBPは生データに無いので、安打H・四球BB・死球HBP・犠飛SF・打数ABから組み立てます。ノイズを減らすため、モダンな時代・フルシーズンに絞ります。

In [2]:
# 1961年以降・ほぼフルシーズンに限定
df = teams[(teams["yearID"] >= 1961) & (teams["G"] >= 150)].copy()

df["AVG"] = df["H"] / df["AB"]                        # 打率
df["OBP"] = (df["H"] + df["BB"] + df["HBP"]) \
           / (df["AB"] + df["BB"] + df["HBP"] + df["SF"])  # 出塁率(近似)

df[["yearID","teamID","R","AVG","OBP"]].head(4).round(3)
Out[2]:
yearID teamID R AVG OBP
0 1961 BAL 691 0.254 0.328
1 1961 BOS 729 0.254 0.334
2 1961 CHA 765 0.265 0.334
3 1961 DET 841 0.266 0.347
なぜ近似?厳密なOBPの分母は打席数ですが流派があります。ここは「四球でも塁に出れば価値」という本質だけ押さえればOK。まず動かして、あとで精緻化が鉄則です。
4答え①

得点との相関を測る : AVG vs OBP

「どちらが得点(R)と強く連動するか」を相関係数で比べます。1.0に近いほど強い関係です。

相関係数の読み方の目安

絶対値 解釈 イメージ
0.0 〜 0.2 ほとんど関係なし 散布図は雲のように散らばる
0.2 〜 0.4 弱い相関 言われてみれば傾いている程度
0.4 〜 0.7 中程度の相関 はっきり傾きが見える
0.7 〜 1.0 強い相関 細長い帯状に並ぶ。今回のAVG(.83)もOBP(.91)もここ

※ 分野によって基準は変わります(物理は0.9でも不満、社会科学は0.4で十分など)。大事なのは絶対値そのものより「AとBを同じ土俵で比べたときどちらが大きいか」です。今回まさにそれをやっています。

In [3]:
for col in ["AVG", "OBP"]:
    r = df["R"].corr(df[col])
    print(f"R vs {col}:  {r:.3f}")
Out[3]:
R vs AVG: 0.826 R vs OBP: 0.905
AVG.826
OBP.905
これがマネーボール出塁率(.905)は打率(.826)より得点との結びつきが強い。四球でコツコツ塁に出る選手は「地味」で当時は安く買えた——なのに得点への貢献は大きい。この"評価と価値のズレ"を突いたのがアスレチックスでした。データが、見た目の派手さより本質を教えてくれる好例です。
相関と因果は違うCorrelation ≠ Causation

「一緒に動く」ことと「原因である」ことは別物です。有名な例に「アイスの売上と水難事故の数」——この2つの相関は強いですが、アイスが事故を起こすわけではなく、裏に気温という共通の原因が隠れています。

このように、両方に影響する隠れた変数を交絡因子、それによって生じる見せかけの相関を疑似相関と呼びます。G検定でも頻出の考え方。今回「1961年以降・150試合以上」に絞ったのも、時代による違い(球の質・試合数)が交絡しないようにという予防策でした。

散布図Scatter Plot

2つの数値を縦横にとって点を打つグラフ。相関係数という「1個の数字」では見落とすもの——曲線的な関係、外れ値、2つの集団に分かれている、といった構造が一目で分かります。

相関係数を出したら必ず散布図も見る。数字が同じでも中身が全く違うデータが作れることは アンスコムの例 として有名です。

散布図で"目で"確かめる

In [4]:
import matplotlib.pyplot as plt
plt.scatter(df["OBP"], df["R"], s=8, alpha=.4)
plt.xlabel("OBP"); plt.ylabel("Runs"); plt.show()
Out[4]:
OBP Runs 右肩上がり = OBPが高いほど得点も多い

Q.相関の結果から言える"マネーボール的"な結論は?

正解! ポイントは「価値(得点への効き)」と「市場価格(注目度)」のズレ。相関が強い=因果や確実性が100%、ではない点も要注意です。
5答え②

得失点から勝ち星を予測 : ピタゴラス勝率

野球には驚くほどよく当たる経験則があります。勝率 ≈ 得点² / (得点² + 失点²)。機械学習なしで、四則演算だけで勝ち星を当てます。

In [5]:
exp = 2
df["pytWpct"] = df["R"]**exp / (df["R"]**exp + df["RA"]**exp)
df["pytW"]    = (df["pytWpct"] * df["G"]).round()

mae = (df["W"] - df["pytW"]).abs().mean()
print(f"平均誤差: {mae:.2f} 勝")
df[["yearID","teamID","R","RA","W","pytW"]].sample(4, random_state=7)
Out[5]:
平均誤差: 2.78 勝
yearID team R RA W(実際) pytW(予測)
· 2001 SEA 927 627 116 109
· 2016 CHN 808 556 103 102
· 1998 NYA 965 656 114 108
· 2019 HOU 920 640 107 103
結果たった1行の式で、実際の勝ち星を平均±3勝ほどで当てられます。「勝敗は結局、点を取って点を防いだ量で決まる」を、データが定量的に裏づける瞬間です。(指数を 1.83 にすると精度が少し上がる、という有名な小ネタも)
MAE(平均絶対誤差)Mean Absolute Error

コード中の (df["W"] - df["pytW"]).abs().mean() がまさにこれ。予測と実際のズレの絶対値を、全部平均した値です。「平均して何勝ぶん外したか」がそのまま読めるので解釈しやすいのが長所。

誤差を2乗して平均するMSE、その平方根のRMSEもよく使われます。2乗する方は大きな外し方をより強く罰する性質があり、外れ値に敏感。回帰(数値を当てる問題)の評価はこの3つが基本セットです。

平均への回帰Regression to the Mean

極端に良い(悪い)結果を出した対象は、次の機会には平均に近づきやすいという統計的な性質。実力ではなく運の振れが結果に混ざっているためです。

「予測より勝ちすぎたチームは翌年落ちやすい」はこれ。ビジネスでも「今期突出した店舗は来期落ちる」など至るところで顔を出し、これを実力の変化と誤読するのがよくある失敗です。

ベースラインとしての経験則Rule of Thumb / Heuristic

ピタゴラス勝率は機械学習を一切使わない、たった1行の式。それで平均±3勝まで当ててしまいます。「まず単純な式で試す」はコース3のベースラインと完全に同じ発想で、これを超えられないモデルには価値がありません。

実務でも「凝ったモデルを作ったのに、経験則の式に負けた」は日常茶飯事。まず簡単な方法、が常に正解です。

Q.予測より実際の勝ちが大きく多いチームは、何が起きていた可能性が高い?

正解! 予測(得失点ベース)を実績が上回るチームは1点差ゲームの勝率が偏っていたことが多く、"運"の要素。翌年は平均に回帰しやすい、という予想にも使えます。
6仕上げ

Notebookを公開して、次の打席へ

分析ができたら公開(Publish)できます。これ自体がContributor称号の条件のひとつ。「何を調べ・何が分かったか」をMarkdownセルで一言添えると、ぐっとNotebookらしくなります。

さらに深掘りするなら

  • 選手単位で同じことを : Batting.csv を使えば「割安な出塁マシン」を個人で探せます。まさに映画の球団がやったこと。
  • OPS (=OBP+SLG) を作って相関を比較。得点との相関が .93 前後まで上がるのを体感できます。
  • 日本のプロ野球 / 大谷選手に興味があれば、Kaggleで NPBStatcast 系データセットを検索。投打の指標で同じ分析が回せます。
今日の収穫ドメイン(野球)の知識 × データ分析(相関・簡単な予測)で、「みんなが見落としている価値」が見えてくる。Kaggleでも実務でも共通の"効く"考え方です。

このコースで通った"分析の型"

やったことを工程名に置き換えると、実は教科書どおりの分析プロセスをなぞっていました。

やったこと 正式には
「打率と出塁率、どちらが得点に効く?」と問いを立てた 課題設定(ビジネス理解)。分析で一番大事な工程
Teams.csv を読んで列と行数を確かめた データ理解 / EDA
1961年以降・150試合以上に絞った データの絞り込み。交絡を減らすための前処理
H・BB・HBP・SF から OBP を組み立てた 特徴量エンジニアリング。ドメイン知識で新しい列を作る作業
相関係数を出し、散布図で確かめた 関係の把握 / 可視化
ピタゴラス勝率の誤差(MAE)を測った 評価。回帰の評価指標
Notebookに考察を書いて公開した 報告・共有。実務ではここが成果物

📍 この工程全体の地図(CRISP-DM)、相関・交絡・評価指標の体系立った説明は → 機械学習の地図(座学・G検定の下地)

スカウト任務、完了 ⚾

データから「出塁率という割安な価値」を見つけ、得失点だけで勝ち星まで予測しました。感覚ではなく数字で選手を語れる、立派なデータ・スカウトです。

両クイズに正解し、全コードセルを Run すると押せます
ボーナス · 音楽編
Bonus · Spotify

音楽データでヒットの謎に迫る

約11万曲のSpotifyデータには、1曲ずつ「踊りやすさ・エネルギー・明るさ」などの音の特徴が数値で付いています。これを使って2つ確かめます。①ジャンルは音だけで当てられる?"人気"は音だけで決まる? 答えが対照的で、「データで分かること・分からないこと」まで見えてきます。

1お題

曲の"体質"を数字で読む

Spotifyは各曲に、耳で感じる印象を0〜1などの数値にしたオーディオ特徴を付けています。まずは道具になる用語だけ。

主なオーディオ特徴
danceability
踊りやすさ(0〜1)
energy
激しさ・勢い(0〜1)
valence
明るさ・ポジ度(0〜1)
acousticness
生音っぽさ(0〜1)
tempo
BPM(速さ)
popularity
人気度(0〜100)

今回の2つの的(まと): track_genre(ジャンル=分類で当てる) と popularity(人気=当てられるか検証する)。

2データ接続

Spotifyデータを繋いで読み込む

新規Notebookで + Add InputDatasetsSpotify Tracks Dataset(maharshipandya)を追加。フォルダ名が -spotify-tracks-dataset(先頭にハイフン!)なので、パスは glob で探してから読むのが安全です。

In [1]:
import pandas as pd, glob

path = glob.glob("/kaggle/input/*spotify*/*.csv")[0]
print(path)

df = pd.read_csv(path, index_col=0)
print(df.shape)
df[["track_name","artists","track_genre","popularity","danceability","energy"]].head()
Out[1]:
/kaggle/input/-spotify-tracks-dataset/dataset.csv (114000, 20)
track_name artists track_genre popularity dance energy
0 Comedy Gen Hoshino acoustic 73 0.68 0.46
1 Ghost Ben Woodward acoustic 55 0.42 0.17
2 To Begin… Ingrid Michaelson acoustic 57 0.44 0.36
3 Can't Help… Kina Grannis acoustic 71 0.27 0.09
4 Hold On Chord Overstreet acoustic 82 0.62 0.44

11.4万曲・125ジャンル。1行が1曲です。

3特徴を体感する

ジャンルごとに"音の体質"は違う?

いきなりモデルの前に、直感を作ります。対照的な4ジャンルで、特徴の平均を比べてみましょう。

In [2]:
genres = ["edm", "classical", "acoustic", "hip-hop"]
sub = df[df["track_genre"].isin(genres)]

sub.groupby("track_genre")[["energy","danceability","acousticness","valence"]].mean().round(2)
Out[2]:
track_genre energy dance acoustic valence
acoustic 0.45 0.56 0.76 0.46
classical 0.22 0.35 0.90 0.24
edm 0.80 0.65 0.08 0.40
hip-hop 0.64 0.72 0.20 0.50
耳と一致する!classicalは生音っぽさ0.90・エネルギー0.22、edmはエネルギー0.80・生音0.08、hip-hopは踊りやすさ最高0.72。数字が、あなたの「なんとなくの印象」とちゃんと一致します。ジャンルは音の特徴にくっきり表れる——これは分類がうまくいく前触れです。
4ジャンルを当てる

モデルは"耳"の代わりに聴き分けられるか

音の特徴だけを手がかりに、4ジャンルのどれかを当てる分類モデルを作り、検証データで精度を測ります(特徴は数値なのでエンコード不要)。

In [3]:
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

feats = ["danceability","energy","acousticness",
         "valence","tempo","loudness","speechiness"]
X = sub[feats]
y = sub["track_genre"]

X_tr, X_val, y_tr, y_val = train_test_split(X, y, test_size=0.2, random_state=0)
clf = RandomForestClassifier(n_estimators=200, random_state=0, n_jobs=-1)
clf.fit(X_tr, y_tr)
print("検証accuracy:", round(clf.score(X_val, y_val), 3))
Out[3]:
検証accuracy: 0.848

4択(当てずっぽうなら0.25)に対して0.85。モデルは音の特徴だけでジャンルをかなり聴き分けられました。何が効いたか見てみましょう。

In [4]:
imp = pd.Series(clf.feature_importances_, index=feats)
imp.sort_values(ascending=False).round(3)
Out[4]:
acoustic.31
energy.25
dance.17
speech.11
tempo.07
読み取り生音っぽさ(acousticness)とエネルギーがジャンルの決め手。classicalとedmを分けているのはまさにここ、と数字が言っています。

Q.音の特徴だけでジャンルをかなり当てられたのはなぜ?

正解! ステップ3で見た"体質の違い"がそのまま効いています。特徴に強い差がある対象は、シンプルなモデルでもよく分類できます。
5正直な問い

じゃあ"人気"は音で決まる?

同じ音の特徴で、今度は popularity(人気度0〜100) を予測してみます。うまくいくでしょうか。全ジャンルで回帰(数値予測)し、決定係数 R²(1に近いほど説明できている)で測ります。

In [5]:
from sklearn.ensemble import RandomForestRegressor

Xp = df[feats]
yp = df["popularity"]
Xp_tr, Xp_val, yp_tr, yp_val = train_test_split(Xp, yp, test_size=0.2, random_state=0)

reg = RandomForestRegressor(n_estimators=150, random_state=0, n_jobs=-1)
reg.fit(Xp_tr, yp_tr)
print("人気予測 R²:", round(reg.score(Xp_val, yp_val), 3))
Out[5]:
人気予測 R²: 0.118
これが今回いちばんの学びジャンルは0.85で当たったのに、人気は R²≈0.12(ほとんど説明できていない)。つまり「曲の音そのもの」では人気は決まらない。人気は宣伝・アーティストの知名度・公開タイミング・プレイリスト掲載など、このデータに入っていない要因に強く左右されるからです。「データで何が分かって、何が分からないか」を見極めるのも、立派な分析力です。

Q.人気(popularity)が音の特徴ではうまく当たらない、最も的確な解釈は?

正解! 限界の原因が"モデル"ではなく"データに情報が無いこと"だと見抜けるのが大事。この場合は特徴量(データ)を増やすのが筋で、モデルを盛るのは的外れです。

できたらチェック ✓

6次の一歩

もっと遊ぶ / 深める

  • 自分の推し曲で試す。好きな曲のオーディオ特徴(Spotifyのアプリや対応サイトで見られる)を入れて、モデルがどのジャンルと言うか試すと楽しい。
  • ジャンルを増やす / 混同を見る。5〜10ジャンルに増やし、confusion_matrix で「どのジャンル同士を間違えるか」を見ると発見がある(pop↔dance系は紛らわしい等)。
  • クラスタリングで、ジャンル名を使わず曲を自動グループ分け(KMeans)。レコメンドの入り口。
  • できたら Notebookを公開して発見を共有(Contributor条件のひとつ)。
つながり「ジャンルは当たる/人気は当たらない」は、実際のレコメンドや楽曲分析でも重要な感覚。データの声を、過大にも過小にも受け取らない——このバランスが今日いちばんの収穫です。

音楽編 修了 : データの耳を手に入れた 🎧

音の特徴でジャンルを聴き分け、そして「人気は音だけでは決まらない」という限界まで見抜きました。分類・検証・重要度に加えて、データで分かること/分からないことを見極める目が身につきました。

両クイズに正解し、全コードセルを Run すると押せます
ボーナス · ポケモンAI編
Bonus · Agent / 開催中

エージェント提出型コンペの始め方

いま開催中の ポケモンカードゲーム AI Battle Challenge を舞台に、これまでと"仕組みが違う"コンペの入り方を学びます。予測CSVではなく、対戦するAI(エージェント)そのものを提出し、世界中のエージェントと自動対戦させて強さを競う——という新ジャンル。"最小の提出"だけならTitanicと同じくらい簡単です。

⚡ これだけ覚えればいい

勝率を上げる=毎ターン"一番マシな手"を選ばせて、その良し悪しを"勝率"で測りながら、1つずつ直す。本質はこれだけ。

  1. AIの仕事は「合法手から1つ選ぶ」だけ。強くする=手に点数を付けて良い順に選ぶこと(倒せる→攻撃→エネ付け→進化→ドロー)。
  2. 効いたかは感覚で分からない → 勝率で測る。固定の相手と100戦。変更は必ず1つずつ、上がれば残す・下がれば戻す。
  3. デッキは"借りて、勝率で選ぶ"。ルールを完璧に覚えてから、ではなく回しながら覚える。知識不足は勝率の計測が肩代わりしてくれる。
Goal · この先で何をするのか

ゴールは「対戦するAIを1体提出して、ラダーに載る」こと

提出するのはCSVではなくプログラムです。main.py(AI本体)と deck.csv(使う60枚)を submission.tar.gz に固めて提出すると、あなたのAIが他の参加者のAIと自動で何百試合も対戦し、その勝敗でレーティング(Elo)が決まります。まずは「合法手からランダムに1手選ぶだけ」のAIで構いません。動いてラダーに載れば、そこが1周目のゴールです。

STEP 01
借りる
公式サンプルを Copy & Edit して、提出物の形を確認 ← ステップ2
STEP 02
動くAIを出す
合法手から1手返すだけの最小エージェントを tar.gz にして提出 ← ステップ3〜4
STEP 03
賢くする
手に優先順位を付け、勝率を測りながら1つずつ改良 ← ステップ5〜6

これまでのコースと、何が同じで何が違う?

Titanic(CSVコンペ) ポケモンAI(エージェントコンペ)
提出物 予測結果の submission.csv 動くプログラム submission.tar.gz
採点の仕組み 正解と照合して即スコア 他のAIと対戦させて勝敗からレーティングを算出
スコアの動き 提出したら確定 提出後も対戦のたびに上下する
失敗の仕方 行数・列名のミスでスコアエラー 実行時エラー・時間切れ・反則手で"負け"扱い
そのまま効くこと まずベースライン / 1つずつ変える / 記録を残す / 検証を信じる——このラボの合言葉は、そっくりそのまま通用します
機械学習は必須ではありません「AIを提出」と聞くと身構えますが、中身が if 文だけのルールベースでも全く問題ありません。実際、この種のコンペでは上位に丁寧なルールベースが並ぶことも珍しくない。学習させるかどうかは、動くものができた後の話です。
日程・提出上限・提出形式は必ず公式を確認このページの記述は執筆時点のものです。締切・1日の提出上限・ファイル構成はコンペの Overview / Rules ページが最新かつ正。食い違ったら公式に従ってください。
1お題

これはCSVコンペじゃない

Titanicや中古車は「予測CSVを出す → 正解と照合して採点」でした。エージェント提出型(シミュレーション)コンペは根本が違います。

  • 提出するのは「対戦するAIのコード」そのもの
  • あなたのAIは、他の参加者のAIと自動で何百試合も対戦する。
  • 順位は静的なスコアではなく、対戦成績から決まるレーティング(Elo)で上下する。
今回の舞台(開催中)ポケモンTCG AI Battle Challenge。The Pokémon Company × Kaggle × 松尾研 × HEROZ。2トラック制で、Simulation部門(〜8/17・賞金なしの腕試し枠)Strategy部門(〜9/14・賞金あり)、決勝は2026年9月に日本で開催。まず触るなら気楽なSimulation部門が入口に最適。チェス/囲碁と違い、相手の手札が見えない"不完全情報"+引きの運があり、AIには格段に難しい題材です。
用語ミニ辞典
エージェント
対戦するAI本体(提出物)
エピソード
1試合ぶんの対戦
合法手
その局面で選べる手の一覧
Elo
対戦成績で決まる強さ指標

実はここ、G検定の「強化学習」の舞台そのもの

エージェント・環境・行動・報酬——これらは強化学習の基本用語で、そのままG検定の出題範囲です。ポケモンAIを作ることは、その言葉を体で覚えることでもあります。

強化学習の登場人物agent / environment / action / reward

エージェント(=あなたのAI)が、環境(=対戦の場)の状態を観測し、行動を選ぶ。その結果報酬を受け取り、報酬の合計が最大になるように行動の選び方(方策)を改善していく——これが強化学習の枠組みです。

今回のポケモン大会では、obsが状態、legal_actionsから選ぶのが行動、勝敗が報酬にあたります。学習させなくても、この枠組み自体は同じです。

完全情報ゲーム と 不完全情報ゲームperfect / imperfect information

将棋・囲碁・チェスのように盤面がすべて見えているのが完全情報ゲーム。ポケカ・ポーカー・麻雀のように相手の手札が見えず、山札の引きに運も絡むのが不完全情報ゲームです。

後者の方がAIには格段に難しい。見えない情報を確率的に推定する必要があり、同じ手を選んでも結果が運で変わるため「その手が良かったのか」の判定も難しくなります。だからこそ1試合の勝敗ではなく、何十戦もの勝率で測る必要があるわけです。

ルールベース と 機械学習rule-based / machine learning

ルールベース=人間が「こういうときはこうする」を書き下ろす方式。機械学習=データから法則を自動で学ばせる方式。今回のLv1〜3はルールベース、Lv5が機械学習です。

ルールベースは第2次AIブームのエキスパートシステムの系譜。「知識を人手で入れ続けるのが限界(知識獲得のボトルネック)」という弱点はありますが、範囲が狭く要件がはっきりした問題では今でも極めて強力です。

EloレーティングElo rating

対戦成績から強さを推定する仕組み。格上に勝つと大きく上がり、格下に勝ってもあまり上がらないのが特徴で、チェス由来。全員が総当たりしなくても実力の順序が推定できるため、対戦型コンペの標準になっています。

📍 強化学習・探索・AIの歴史をまとめて知りたい → 機械学習の地図(座学・G検定の下地)

2鉄則

まず公式スターターを Fork する

エージェントの入出力の作法(API)はコンペごとに違います。ここで一番やってはいけないのが「推測でAPIを自作する」こと。正解は決まっています。

  1. コンペの Code タブで、公式・人気のサンプルエージェントNotebookを開く(ポケモンなら「A Sample Rule-Based Agent」「Beginner Guide: From Deck to First Valid Submission」など)。
  2. Copy & Edit で自分の環境に複製。
  3. そこで提出物の形関数の呼ばれ方を確認する。ポケモン大会では、提出は main.pydeck.csvsubmission.tar.gz にまとめる形式です。
合言葉推測でAPIを作らない。公式サンプルの仕様が最優先。」——これはエージェント系コンペ全部に共通する第一歩です。
3エージェントの中身

形はだいたい「obsを受け取って、合法手を1つ返す」

多くのエージェントは agent(obs) -> action という関数です。「今の盤面(obs)」を受け取り、「選べる手(合法手)の中から1つ」を返すだけ。まずはランダムに合法手を返す最小版で十分です(強さは後回し、動くことが最優先)。

main.py
import random

def agent(obs):
    # obs = 今の局面。合法手の一覧を取り出す(キー名は公式サンプルに合わせる)
    legal = obs["legal_actions"]
    if not legal:
        return 0                    # フォールバック : 絶対にクラッシュさせない
    return random.choice(legal)     # まずは合法手からランダムで1手
out
OK: 合法手から1手を返す最小エージェント (main.py)
絶対に守る4か条合法手の中からだけ返す(合法手以外を返さない) ② 絶対にクラッシュしない(必ずフォールバックを用意) ③ 1手の制限時間を守るネットワーク/外部API/巨大LLM実行は禁止。この4つを外すと即失格・エラー負けになります。

Q.エージェント提出型で、いちばん最初にやるべきことは?

正解! 「動く最小提出をまず1周」→「公式仕様に完全準拠」が鉄則。強さや凝った設計はそのあと。推測でAPIを作るのは最大の遠回りです。
4最小の提出を1周する

"強いAI"より先に"動く提出"

ポケモン大会の提出物は、main.py(AI本体)と deck.csv(使う60枚。サンプルのをそのまま使ってOK)を、トップ階層に置いた submission.tar.gz。Notebook上でこう固めます。

In [1]:
import tarfile

with tarfile.open("submission.tar.gz", "w:gz") as tar:
    tar.add("main.py")     # AI本体
    tar.add("deck.csv")    # 使う60枚(サンプル流用でOK)
print("built submission.tar.gz")
Out[1]:
built submission.tar.gz → main.py, deck.csv (トップ階層に配置)

提出は2通り。NotebookのOutputから Submit、または端末/コードからKaggle CLIで。

 
# Kaggle CLI で提出する場合
kaggle competitions submit pokemon-tcg-ai-battle \
  -f submission.tar.gz -m "random baseline"
ここがCSVコンペと同じ「まずベースライン(ランダム)を提出して1周」——ラボ全体の合言葉がそのまま通用します。ランダムでも、まずラダーに乗ることが第一歩です。
5ランキングの読み方

スコアは"対戦しながら"決まる (Eloラダー)

CSVコンペのように提出直後に確定スコアが出るのではありません。提出後、あなたのエージェントは他のエージェントと自動対戦を繰り返し、勝てばレーティングが上がり負ければ下がる——という形で順位がだんだん定まります。

ladder
# イメージ : 対戦を重ねてレーティングが動く
show_leaderboard()
out
順位 エージェント Elo
1 strong-heuristic 1180
2 mega-lucario-rule 1120
842 your-random ←まずここ 780
効いてくる感覚だから見るべきは「提出直後の1点」ではなく対戦を経たレーティングの動き。ポケモン大会は1日5エージェントまで提出でき、少しずつ賢くして再提出→ラダーを登る、の繰り返しです。順位は相手次第で揺れるので、一喜一憂しすぎないのもコツ。

提出したあと、どこを見る?

CSVコンペと違い提出してすぐには数字が出ません。見る場所と、それぞれの状態が何を意味するかを押さえておきましょう。

1
My Submissions(提出一覧)まずここ
コンペページの Submissions。提出した submission.tar.gz の行に状態が出ます。
Validating = 形式チェック中 → Running / Active = 対戦に参加中(正常) → Error / Invalid = 動かなかった。まず Active になることが1周目のゴールです。
2
Leaderboard(ラダー)
自分のエージェントが載り、対戦が進むにつれてレーティングが動きます。提出直後は暫定値なので、少し時間をおいてから見るのが正解。1試合ごとの結果ではなく何十試合ぶんかの傾向で判断します。
3
対戦ログ / エピソードの記録改善のヒントはここ
個々の試合の記録を開くと、どのターンで何を選んだか、どこで負けたかが追えます。エラーで落ちた場合もここにログが残るので、「なぜ負けたか」を推測ではなく事実で確認できる唯一の場所です。
Error になる三大原因合法手以外を返した(反則手) ② 例外で落ちた(想定外の局面でキー参照に失敗、など) ③ 制限時間を超えた。どれも「強さ」以前の問題です。try/except で何があっても合法手を1つ返すフォールバックを最初から入れておくのが定石。
CSVコンペとの決定的な違いTitanicでの失敗は「提出ファイルの形式ミス」だけでした。エージェントでは実行中のあらゆる瞬間に落ちる可能性がある。だから強さより先に"絶対に落ちないこと"が価値を持ちます。

Q.CSVコンペと違い、提出後にスコア(順位)が変動していくのはなぜ?

正解! 順位=対戦の結果。だから静的な正解率ではなく、レーティングという"生きている指標"で評価されます。

できたらチェック ✓

6勝率アップのロードマップ

「何をすればいいか分からない」からの勝率アップ順

ここが本題。効く順に並べました。上から順にやるのが正解で、いきなり下(学習)に行くのが一番の遠回りです。

大原則ポケカは「デッキ7割・プレイング3割」と言われるほどデッキが効きます。凝ったAIを作る前に、まず強いデッキ+当たり前の優先順位。ここで勝率の大半が決まります。

効く順のロードマップ

  1. Lv1 : デッキを借りる(最重要) … 環境で強いとされるデッキ(今は Mega Evolution ex 系が中心)をサンプルからそのまま使う。弱いデッキは何をしても勝ちにくい。まず"強いと言われるデッキ"に乗るだけで勝率が動く。
  2. Lv2 : ランダムをやめて優先順位を入れる(一番コスパ良い) … 合法手に点数を付けて一番良い手を選ぶだけ。型はこう →
    倒せる相手は倒す(リーサル) > 攻撃できるなら攻撃 > 毎ターンのエネルギー付け > 進化できるなら進化 > ドロー/サーチで手札補充 > 瀕死のアタッカーは下げる
  3. Lv3 : 局面を点数化する … 手を打った後の"自分の有利さ"を数値化(自軍の合計HP・エネルギー数・相手のサイド残り・手札枚数・倒せる相手の有無)。各合法手を1手だけ試して、評価が最大の手を選ぶ"貪欲法"。
  4. Lv4 : 少し先読み … 余裕が出たら数手先読み or モンテカルロ(ランダムに何度も試して勝率が高い手を選ぶ)。不完全情報+制限時間なので軽めに。
  5. Lv5 : 学習(RL/模倣) … PPO等の強化学習や上位エージェントの模倣。上級。Lv1〜3だけで十分ラダーは登れるので後回しでOK。
貪欲法Greedy Algorithm

Lv3でやることの正式名称。先のことは考えず、その場でいちばん良さそうな選択肢を毎回選ぶ方法です。実装が簡単で速い一方、目先の得に釣られて長期的に損をするのが弱点(いま攻撃するより準備した方が良い場面、など)。

探索と活用のジレンマExploration-Exploitation Tradeoff

今わかっている一番良い手を使う(活用)か、まだ試していない手を試す(探索)か、というトレードオフ。活用ばかりだと未知のもっと良い手に出会えず、探索ばかりだと勝てません。強化学習の中心的なテーマで、G検定でも頻出です。

一定確率でわざとランダムな手を選ぶ ε-greedy法 が最も基本的な対処法。「1つずつ変えて勝率を測る」という改善の進め方自体も、探索と活用のバランス取りにほかなりません。

モンテカルロ木探索(MCTS)Monte Carlo Tree Search

Lv4の「ランダムに何度も試して勝率が高い手を選ぶ」の正式名称。その手を打った先をランダムに何度もプレイさせ、勝率が高かった手を採用するという考え方で、盤面の良し悪しを人間が定義しなくて済むのが強みです。

AlphaGoが囲碁で人間のトップ棋士を破った際の中核技術(ディープラーニングと組み合わせて使用)。G検定の定番トピックでもあります。

迷子を抜ける核心 : 測って比べる「何をしていいか分からない」の特効薬は勝率を測ること。ローカルでサンプル相手や旧版と数十〜百戦させて勝率を計測 → 1つ変える → 上がれば残す/下がれば戻す、の反復。1日5提出の枠は、ローカルで良かったものだけに使う。上位の公開Notebookをフォークしたり、Discussionの「3万試合から見た上位者の手法」系の投稿を読むのも近道です。

最初の3日プラン(迷子脱出用)

  1. Day 1 … 公式サンプル(ルールベース)をそのまま提出して、動作とラダー掲載を確認。
  2. Day 2 … デッキを強いものに差し替え、旧版とローカル対戦で勝率を比較。
  3. Day 3 … 優先順位(攻撃→エネ付け→進化→ドロー)を1つずつ足し、都度勝率を計測。
最後まで死守強くする前に、合法手だけ返す・クラッシュしない・時間内に返すは絶対。ここを外すと"負け"以前に失格になります。そして「まず動かす→小さく速く改善→記録を残す」——このラボ全体の合言葉が、エージェント系でもそのまま効きます。

Titanicで身につけたことは、ここでどう効く?

「予測モデルの話は終わったから、ここは全部ゼロから?」——そんなことはありません。効くもの・新しく必要なものを分けておきます。

コース1〜3で身につけたこと ポケモンAI編での効き方
まずベースラインを提出する そのまま最重要。「合法手をランダムに返すAI」がここでのベースライン
1つずつ変えて効果を測る そのまま通用。ただし測る道具が正解率ではなく勝率になる
手元の検証を信じる(CV) ローカル対戦の勝率がCVの役割。提出枠を無駄にしないための命綱
Descriptionに記録を残す そのまま。「どのバージョンで何を変えたか」が分からなくなると改善が止まる
公開Notebookを Copy & Edit そのまま。むしろAPI仕様が公開サンプルにしか書かれていないぶん必須度が高い
新しく必要になるのは … ①ゲームのルール理解 ②絶対に落ちないコードを書く姿勢 ③1試合の結果ではなく勝率で判断する忍耐。機械学習の知識そのものは、実はほとんど要りません。
つまずいたら戻る場所強化学習・探索・エージェントといった用語を体系立てて確認したいときは → 機械学習の地図(座学)。提出の流れやスコアの見方があやしくなったら → コース3 に戻るのが早道です。

ポケモンAI編 修了 : 対戦AIを提出できた ⚡

予測CSVとは別世界の「エージェント提出型コンペ」の入り方——公式Fork → 合法手を返す最小エージェント → tar.gzで提出 → Eloラダー、までを掴みました。開催中の大会に、今日から実際に参加できます。

両クイズに正解し、全コードセルを Run すると押せます
機械学習の地図
Reference · 座学

データ分析・機械学習の「流れ」と用語の地図

手を動かすコースの裏側には、決まった型(プロセス)があります。ここではその全体の流れと、各工程で必ず出てくる用語を一気に整理します。G検定(JDLA ジェネラリスト検定)の出題範囲を意識した構成なので、資格を視野に入れている人の下地にもなります。

コードは出てきません。読み物として流し読み → コースで手を動かす → また戻ってくる、の順がいちばん定着します。

この地図の要点

機械学習プロジェクトは 「課題設定 → データ収集 → データ理解(EDA) → 前処理 → モデリング → 評価 → 運用」 の順に進み、行ったり来たりしながら精度を上げていきます。Kaggleは工程1・2を主催者が済ませてくれているので、工程3〜6の練習に集中できる場所です。時間の大半を食うのは前処理と特徴量作りで、モデル選びではありません。

1全体像

分析プロジェクトは、この7工程をぐるぐる回る

この流れには CRISP-DM という業界標準の名前がついています。1990年代に策定され、今でもデータ分析プロセスの共通言語として使われています。

CRISP-DMCRoss-Industry Standard Process for Data Mining

分析プロジェクトを ビジネス理解 → データ理解 → データ準備 → モデリング → 評価 → 展開(デプロイ) の6フェーズで表したプロセスモデル。一方通行ではなく循環する(戻る)のが最大のポイントで、「評価してダメだったらデータ準備に戻る」が前提になっています。

G検定でも「AIプロジェクトの進め方」として頻出。似た枠組みに KDD(Knowledge Discovery in Databases)、実務寄りのものに MLOps があります。

1
課題設定(ビジネス理解)Kaggleでは主催者が済
「何を予測できたら誰が嬉しいのか」を決める工程。そもそも機械学習で解くべき問題か、ルールベースで十分ではないか、成功をどの数字で測るかをここで固めます。実務ではここの失敗が一番致命的。
2
データ収集Kaggleでは配布済み
ログ・DB・センサー・アンケート・Webスクレイピングなどからデータを集める工程。集められる量と質が上限を決めます。個人情報や著作権の扱いに気を配るのもここ。
3
データ理解 / EDAコース2でやったこと
行数・列数()、欠損値(欠け)、分布と関係(傾向)を見る探索的データ分析。「このデータで何がどこまで言えそうか」の見当をつけます。
4
前処理・特徴量エンジニアリング時間の8割
欠損補完・カテゴリ変数の数値化・スケーリング・外れ値処理・新しい特徴量の作成。ここの丁寧さがスコアに一番効きます(詳しくはセクション3)。
5
モデリング(学習)コース3でやったこと
アルゴリズムを選び、学習データで法則を覚えさせる(fit)。ハイパーパラメータの調整もここ。
6
評価
学習に使っていないデータで性能を測る。正解率・適合率・再現率・AUCなど、課題に合った指標を選ぶ必要があります(セクション5)。ダメなら工程3・4に戻る。
7
運用・改善(デプロイ)Kaggleでは提出=ここ
実サービスに載せて使い続ける工程。時間が経つとデータの傾向が変わって精度が落ちる(コンセプトドリフト)ため、再学習の仕組みまで含めて設計します。この一連の運用基盤づくりを MLOps と呼びます。
Kaggleとの関係コンペは工程1・2・7が省かれた「工程3〜6だけを高速で何度も回せる練習場」です。だから上達が速い反面、実務では省かれた工程1・2・7がむしろ本番——という点は覚えておくと視野が広がります。
2問題の型

機械学習は大きく3種類。まずどれかを見分ける

「答え(正解ラベル)があるか」「何を最大化するか」で3つに分かれます。手元のデータがどれに当たるかを判断するのが最初の分岐点です。

🎯
教師あり学習

答え付きデータから法則を学ぶ。分類(カテゴリを当てる)と回帰(数値を当てる)。Titanicは分類。

🔍
教師なし学習

答えなしで構造を見つける。クラスタリング(仲間分け)、次元削減(情報を圧縮)、異常検知など。

🎮
強化学習

試行錯誤しながら報酬の合計が最大になる行動を学ぶ。AlphaGoやゲームAI、ロボット制御。

種類 タスク やること 代表的な手法
教師あり 分類 Classification カテゴリを当てる
生存/死亡、迷惑メールか否か、ジャンル判定
ロジスティック回帰・決定木・ランダムフォレスト・SVM・k-NN
回帰 Regression 連続した数値を当てる
住宅価格、来客数、株価
線形回帰・リッジ/ラッソ回帰・勾配ブースティング
教師なし クラスタリング 似たもの同士をグループに分ける
顧客セグメント分け
k-means法・階層的クラスタリング
次元削減 情報をなるべく保ったまま列を減らす
可視化、前処理
主成分分析(PCA)・t-SNE
強化学習 方策の学習 行動 → 報酬 → 行動…を繰り返して最適な戦略を得る
ゲーム、ロボット、推薦
Q学習・DQN・方策勾配法
紛らわしい名前ロジスティック回帰は名前に「回帰」と付きますが分類の手法です(0〜1の確率を出して、0.5などのしきい値で振り分ける)。G検定でもよく狙われるひっかけ。
3前処理

前処理の道具箱 : 欠損・カテゴリ・スケール・外れ値

集めたままのデータは、たいていそのままではモデルに入りません。「モデルが食べられる形に整える」のが前処理です。分析作業の体感8割がここ、と言われます。

1. 欠損値をどうするか

空欄(NaN)があると多くのモデルは学習できません。対処は大きく「消す」か「埋める」の2択です。

方針 やり方 向いている場面 / 注意
消す 欠損のあるを落とす(リストワイズ削除)
欠損だらけのごと落とす
欠損がごく少ないとき。行を消すとデータ量が減り、偏りが生まれる危険も。Titanicの Cabin(7割欠損)は列ごと落とす判断が定番。
埋める
補完/代入
平均値・中央値・最頻値で埋める
前後の値で埋める(時系列)
他の列から予測して埋める
最も一般的。外れ値の影響を受けにくい中央値が無難。埋めた値は「作り話」なので、欠損だったこと自体を1/0の列で残すと精度が上がることも。
そのまま 欠損に対応したモデルを使う LightGBM/XGBoostなどは欠損をそのまま扱えます。「欠けている」こと自体が情報になる場合に有効。
欠損値補完Imputation

欠損を何らかの値で埋めること。df["Age"].fillna(df["Age"].median()) が典型例。欠損がどう発生したか(ランダムなのか、特定の人だけ答えなかったのか)で適切なやり方が変わります。

統計では欠損の発生の仕方を MCAR(完全にランダム) / MAR(他の観測値で説明できる) / MNAR(欠損した値そのものに依存)の3つに分類します。MNARを単純な平均補完で埋めると結論が歪みます。

2. カテゴリ変数を数値にする(エンコーディング)

male/female のような文字列は、そのままでは計算できません。数値に変換します。

手法 変換のしかた 使いどころ
ラベルエンコーディング 赤=0, 青=1, 緑=2 のように連番を振る 列が増えず手軽。ただし「緑>青>赤」という大小関係が無いのに生まれるため、線形モデルとは相性が悪い。決定木系なら概ねOK。
ワンホットエンコーディング 「赤か?」「青か?」「緑か?」の0/1の列に分解する 大小関係が生まれず安全で最も一般的。ただし種類が多いと列が爆発する(次元の呪い)。pd.get_dummies()
ターゲットエンコーディング カテゴリごとの目的変数の平均値に置き換える Kaggleで強力。ただし答えを使うのでリーク(カンニング)が起きやすく、交差検証と組み合わせた慎重な実装が必要。

3. 数値の大きさを揃える(スケーリング)

年齢(0〜80)と年収(0〜1000万)を並べると、単位が大きい列だけが強く効いてしまう手法があります。そこで尺度を揃えます。

正規化Normalization / Min-Max

最小値0・最大値1の範囲に押し込める変換。値の範囲がはっきり決まっているときや画像の画素値(0〜255→0〜1)でよく使います。外れ値に弱いのが弱点。

標準化Standardization / z-score

平均0・分散1になるように変換する方法。「平均から標準偏差いくつ分離れているか」に揃えます。外れ値に比較的強く、迷ったらこちら。

必要な手法: 線形回帰・ロジスティック回帰・SVM・k-NN・k-means・ニューラルネットワーク(距離や重みを使うもの)。
ほぼ不要: 決定木・ランダムフォレスト・勾配ブースティング(分岐の順序しか見ないため)。

4. 外れ値・不均衡・次元

外れ値Outlier

他から極端に離れた値。入力ミスなら除去、本物なら残すか対数変換で潰す。箱ひげ図や四分位範囲(IQR)で見つけるのが定番です。「消せばよい」とは限らないのが難しいところ。

不均衡データImbalanced Data

「正常99% : 異常1%」のようにクラスの数が極端に偏ったデータ。全部「正常」と答えるだけで正解率99%になるため、正解率で評価してはいけません。対策は少数側を増やすオーバーサンプリング(SMOTEなど)、多数側を減らすアンダーサンプリング、重み付けなど。

次元の呪いCurse of Dimensionality

列(次元)が増えるほどデータが空間内でスカスカになり、必要なサンプル数が爆発的に増える現象。だから闇雲に特徴量を増やすのではなく、効く列を選ぶ(特徴量選択)、圧縮する(次元削減 / 主成分分析 PCA)といった手当てをします。

前処理の鉄則補完に使う中央値や、標準化に使う平均・分散は 「学習データだけ」から計算して、テストデータにも同じ値を適用する。テストデータの情報を使って前処理すると、それだけでリーク(情報漏洩)になり、手元のスコアだけが不当に良くなります。
4学習と検証

過学習との戦いが、モデル作りの本体

機械学習の目的は「学習データで高得点を取ること」ではなく まだ見ぬデータで当てること(汎化性能)。この一点を守るための作法が固まっています。

過学習 と 未学習Overfitting / Underfitting

過学習=学習データを丸暗記して未知のデータに弱い状態(モデルが複雑すぎ)。未学習=そもそも学習データすら当てられない状態(モデルが単純すぎ)。ちょうど良い複雑さを探す作業がモデリングです。

バイアス・バリアンスのトレードオフBias-Variance Tradeoff

誤差は バイアス(単純すぎて的を外す)+バリアンス(データのブレに振り回される)+ノイズに分解できます。片方を下げるともう片方が上がるため、両者の和が最小になる点を狙います。未学習=高バイアス、過学習=高バリアンス。

ホールドアウト法 と 交差検証Holdout / Cross Validation

手元のデータを訓練用と検証用に分けて採点するのがホールドアウト法。分け方の運に左右されるので、k個に分けて1個を検証用にする作業をk回繰り返し平均を取るのがk分割交差検証(k-fold CV)です。k=5 や 10 が定番。

クラス比率を保って分ける層化(Stratified)、時系列では未来を使わない時系列分割が必要になります。

正則化Regularization / L1 · L2

「係数が大きくなりすぎたら罰金」というペナルティを損失関数に足して、モデルが複雑になりすぎるのを抑える技術。L1正則化(ラッソ)は不要な係数をピタリと0にするので特徴量選択の効果があり、L2正則化(リッジ)は係数全体を小さく抑えます。両方使うのが Elastic Net。

パラメータ と ハイパーパラメータparameter / hyperparameter

パラメータは学習の結果としてモデルが自動で決める値(重み・係数)。ハイパーパラメータ人間が事前に決める設定値(木の本数、深さ、学習率など)。後者を探す作業がグリッドサーチ / ランダムサーチ / ベイズ最適化です。

データリークData Leakage

本来使えないはずの情報(答え・未来の情報・テストデータの統計量)が学習に混ざってしまうこと。検証スコアだけ異常に高く、本番でガタ落ちするのが典型症状。Kaggleで「CVは0.99なのにLBは0.6」となったらまずこれを疑います。

過学習を抑える代表的な打ち手データを増やす / 特徴量を減らす / 正則化を強める / モデルを単純にする / アンサンブルする / (ニューラルネットなら)ドロップアウト早期終了(Early Stopping)データ拡張
5評価指標

「正解率」だけでは足りない理由

1000人に1人の病気を「全員陰性」と判定するモデルは、正解率99.9%です。でも役に立ちません。何を測るかは課題によって選び分ける必要があります。

すべての出発点 : 混同行列

予測 : 陽性(1) 予測 : 陰性(0)
実際 : 陽性(1) TP真陽性
当たり
FN偽陰性
見逃し(あるのに無いと判定)
実際 : 陰性(0) FP偽陽性
誤検知(無いのにあると判定)
TN真陰性
当たり
指標 意味 計算 重視する場面
正解率
Accuracy
全体のうち当たった割合 (TP+TN) / 全体 クラスの数が偏っていないとき。不均衡データでは使えない
適合率
Precision
陽性と予測したうち、本当に陽性だった割合 TP / (TP+FP) 誤検知を減らしたいとき。迷惑メール判定(大事なメールを弾きたくない)
再現率
Recall
本当の陽性のうち、拾えた割合 TP / (TP+FN) 見逃しを減らしたいとき。病気の検査、不正検知
F値
F1-score
適合率と再現率の調和平均 2PR / (P+R) 両者のバランスを1つの数字で見たいとき
ROC-AUC しきい値を動かしたときの性能を面積で表したもの(0.5=でたらめ、1.0=完璧) ROC曲線の下側面積 しきい値に依らず順位付けの良さを見たいとき。不均衡データでも比較的頑健
適合率と再現率はトレードオフ「怪しければ全部陽性」にすると再現率は上がるが適合率は下がる。逆に「確実なものだけ陽性」にすると適合率は上がり再現率は下がります。見逃しと誤検知、どちらの損害が大きい課題なのか——それを決めるのは技術ではなくビジネス側の判断です。

回帰(数値を当てる)の指標

  • MSE(平均二乗誤差) … 誤差を2乗して平均。大きな外れを強く罰する。
  • RMSE … MSEの平方根。元のデータと単位が揃うので解釈しやすい。Kaggleの回帰コンペで最頻出。
  • MAE(平均絶対誤差) … 誤差の絶対値の平均。外れ値の影響を受けにくい。
  • 決定係数 R² … 「平均で予測する場合と比べてどれだけマシか」。1に近いほど良く、0なら平均と同じ、マイナスもあり得る。
6アルゴリズム

名前だけは知っておきたい主要アルゴリズム

全部覚える必要はありません。「どういうときに使うのか」だけ掴んでおくと、公開Notebookが一気に読めるようになります。

手法 ざっくり何をしている? 特徴
線形回帰 点の真ん中を通る直線(平面)を引く 最もシンプル。係数を読めば解釈しやすい
ロジスティック回帰 0〜1の確率を出してしきい値で分類する 分類の基本形。軽くて解釈しやすい
決定木 Yes/Noの質問を枝分かれさせて答えに至る 人間が読める。単体では過学習しやすい
ランダムフォレスト 少しずつ違う決定木を大量に作って多数決 バギングの代表。安定して強く、調整が少なくて済む
勾配ブースティング
XGBoost / LightGBM / CatBoost
前の木の間違いを次の木が補う形で順番に足していく ブースティングの代表。表形式データでは現在の主力
SVM(サポートベクターマシン) 境界線とデータの余白(マージン)が最大になる線を引く カーネル法で曲がった境界も扱える。データが多いと重い
k-NN(k近傍法) 近くのk個の仲間の多数決で決める 学習がほぼ不要。スケーリング必須
ナイーブベイズ 各特徴が独立と仮定して確率を掛け合わせる テキスト分類(迷惑メール判定)で古典的に強い
k-means法 データをk個の塊に分ける(教師なし) クラスタリングの定番。kは人間が決める
主成分分析(PCA) 情報の損失が少なくなるように列を圧縮する(教師なし) 次元削減・可視化の定番
アンサンブル学習Ensemble

弱いモデルを組み合わせて強くする考え方。並列に作って多数決するバギング(=ランダムフォレスト)、順番に弱点を補うブースティング(=XGBoost等)、複数モデルの予測をさらに別のモデルで統合するスタッキングがあります。Kaggle上位は必ずと言っていいほど使います。

ノーフリーランチ定理No Free Lunch Theorem

あらゆる問題で万能に最強なアルゴリズムは存在しないという定理。だから「とりあえずこれを使えば勝てる」は無く、データを見て試すしかない——という実務感覚の理論的な裏づけです。G検定の頻出用語。

7ディープラーニング

ニューラルネットワークの基礎用語

G検定の主戦場です。ここは「言葉と役割の対応」を押さえるだけで、かなり読めるようになります。

用語 役割
ニューラルネットワーク 入力層 → 隠れ層 → 出力層と信号を伝える構造。層を深く重ねたものがディープラーニング。各つながりが持つ重みバイアスを学習で調整します。
活性化関数 信号を次の層へ渡すときの変換。シグモイド(0〜1)、tanhReLU(0以下は0、正はそのまま/現在の標準)、出力を確率分布にするソフトマックス。これが無いと何層重ねてもただの直線になります。
損失関数 予測と正解のズレを測る関数。回帰は二乗誤差、分類は交差エントロピーが定番。これを小さくするのが学習
勾配降下法 損失が小さくなる方向へ重みを少しずつ動かす方法。一歩の大きさが学習率。少量ずつ処理するミニバッチ学習(SGD)が一般的。発展形に Momentum・AdaGrad・RMSProp・Adam
誤差逆伝播法 出力側の誤差を入力側へ逆向きに伝えて各層の重みの直し方を求める仕組み。ディープラーニングを実用化した中核技術。
勾配消失問題 層を深くすると誤差が入力側に届く頃にはほぼ0になり学習が進まない問題。ReLUバッチ正規化残差接続(ResNet)などで克服されました。
CNN(畳み込みニューラルネットワーク) 畳み込み層で局所的な特徴を抽出し、プーリング層で位置ズレに強くする。画像認識の主役。AlexNet・VGG・ResNet。
RNN / LSTM / GRU 前の時刻の出力を次に渡し、時系列や文章を扱う。長期の記憶が苦手なRNNを改良したのがLSTM・GRU。
Transformer / 注意機構 2017年の論文「Attention Is All You Need」で登場。Attention(どこに注目するか)だけで系列を処理し、並列計算できるため大規模化に成功。BERT・GPTなど現在の大規模言語モデルの土台
事前学習とファインチューニング 巨大データで汎用的に学習させた基盤モデルを、手元の少ないデータで微調整して使う流れ。ゼロから学習するより圧倒的に効率的で、これを転移学習と呼びます。
生成AI 文章・画像・音声などを作り出すモデル。GAN(生成器と識別器を競わせる)、VAE、拡散モデル(ノイズから画像を復元)、大規模言語モデル(LLM)。もっともらしい嘘を言うハルシネーションが課題。
Kaggleとのつながり表形式データ(Titanicなど)では、実はディープラーニングより勾配ブースティングの方が強いことが多いです。ディープラーニングが圧勝するのは画像・音声・自然言語といった非構造化データ。この使い分けの感覚は実務でもそのまま効きます。
8歴史と論点

AIの3度のブームと、そこで生まれた問い

G検定では歴史と、それぞれの時代で「何ができて何ができなかったか」がよく問われます。

1
第1次ブーム : 探索と推論1950年代後半〜60年代
1956年のダートマス会議で「人工知能(Artificial Intelligence)」という言葉が誕生。迷路やパズルは解けたものの、現実の複雑な問題には歯が立たず(トイプロブレム)、冬の時代へ。
2
第2次ブーム : 知識表現1980年代
専門家の知識をルールとして詰め込むエキスパートシステム(感染症診断のMYCINなど)が実用化。しかし知識を人手で入れ続けるのは限界があり(知識獲得のボトルネック)、再び冬へ。日本の第五世代コンピュータ計画もこの時代。
3
第3次ブーム : 機械学習・ディープラーニング2010年代〜
データと計算資源の増加が起爆剤。2012年の画像認識コンペ ILSVRCでトロント大のディープラーニング(AlexNet)が圧勝したのが転換点。2016年にAlphaGoが世界トップ棋士に勝利。
4
現在 : 基盤モデルと生成AI2017年〜
2017年のTransformer登場以降、巨大モデルを大量データで事前学習する流れが定着。2022年末のChatGPT公開で一般にも波及し、法整備や倫理の議論が加速しました。

押さえておきたい古典的な問い

用語 内容
チューリングテスト 1950年、アラン・チューリングが提案。人間の判定者が会話相手を機械だと見抜けなければ知能があると見なすという判定法。
強いAI / 弱いAI 哲学者ジョン・サールの区分。強いAI=人間と同じように心を持ち意味を理解するAI、弱いAI=特定の仕事をこなす道具としてのAI。現在実現しているのはすべて弱いAI。
中国語の部屋 サールによる思考実験。マニュアル通りに記号を操作して正しく応答できても、意味を理解しているとは限らないという反論。
フレーム問題 現実の課題で「今何を考慮すべきか」の範囲を切り出せないという難問。関係する事柄が無限にあるため、AIは計算が終わらなくなる。
シンボルグラウンディング問題 記号(言葉)と、それが指す実世界の意味を結びつけられないという問題。「シマウマ」の記号を知っていても実物と結びつかない。
シンギュラリティ 技術的特異点。AIが自ら自分より賢いAIを作り始め、人間の予測を超える転換点。レイ・カーツワイルは2045年と予測。
9法律・倫理

データを扱う人が知っておくべきルール

G検定の後半はここが厚めに出ます。技術ではなく「使い方」の話で、Kaggleでデータを公開したり業務でモデルを作るときにも直結します。

テーマ 要点
個人情報保護法 個人を特定できる情報の取り扱いルール。特定できないよう加工した匿名加工情報、他の情報と照合しなければ特定できない仮名加工情報という枠組みがあり、条件を満たせば分析利用の幅が広がります。取得時には利用目的の特定・通知が必要。
GDPR(EU一般データ保護規則) EUの厳しい個人データ保護規則。域外の企業にも適用され得ます。データポータビリティ忘れられる権利、自動処理のみによる決定に異議を唱える権利などを定めています。
著作権法 第30条の4 日本では情報解析(機械学習の学習)目的であれば、著作物を原則利用できると定められています。ただし「著作権者の利益を不当に害する場合」は除外され、生成物が既存作品に類似する場合は別途侵害の問題が生じます。
AI事業者ガイドライン 総務省・経済産業省がまとめた国内の指針。人間中心・安全性・公平性・透明性・アカウンタビリティといった原則を、開発者/提供者/利用者の立場別に整理しています。
EU AI Act 世界初の包括的なAI規制法。用途をリスクの高さで4段階に分類し、許容できないリスク(社会的スコアリング等)は禁止、高リスク用途には厳しい義務を課すリスクベースアプローチを採ります。
公平性・バイアス 学習データに社会の偏りが含まれていれば、モデルはそれをそのまま学習し増幅します(採用選考で特定の性別が不利になる等)。データの偏りを点検するのは開発者の責任。
説明可能AI(XAI) 「なぜその予測になったか」を人間に説明できるようにする研究分野。ブラックボックス問題への対処で、医療・金融・採用など説明責任が求められる領域で必須。代表的な手法に LIME・SHAP。
生成AIのリスク ハルシネーション(もっともらしい嘘)、ディープフェイク、機密情報の入力による漏洩、プロンプトインジェクション、著作権侵害。「出力をそのまま信じない」運用設計が前提になります。
Kaggleでも他人事ではないDatasetを公開するときはライセンスと個人情報の確認が必須。コンペのデータを規約に反して外部に持ち出す・商用利用するのもルール違反です。参加前にRulesを読む習慣を。
10資格

G検定ってなに? Kaggleとどう組み合わせる?

G検定JDLA Deep Learning for GENERAL

日本ディープラーニング協会(JDLA)が実施する、ディープラーニングを「事業に活かす人」向けの知識検定。実装はせず、用語・仕組み・歴史・法律や倫理まで幅広く問われます。オンラインで受験でき、多肢選択式で問題数が多いのが特徴。

実装者向けの上位資格が E資格(こちらは認定プログラムの受講が受験条件で、コーディングを含む)。試験時間・問題数・シラバスは改定されるので、受験前に必ず公式サイトで最新の実施要項を確認してください。

出題範囲と、このページの対応

G検定のテーマ このページで読むところ
人工知能とは / AIをめぐる動向・問題 セクション8「歴史と論点」
機械学習の具体的手法 セクション2「問題の型」・6「アルゴリズム」
ディープラーニングの概要・手法 セクション7「ディープラーニング」
モデルの評価・チューニング セクション4「学習と検証」・5「評価指標」
データの取り扱い・前処理 セクション3「前処理」
AIの社会実装・法律・倫理 セクション1「全体像」・9「法律・倫理」
おすすめの組み合わせ方G検定は「言葉の地図」、Kaggleは「手の感覚」。片方だけだと、用語は言えるが動かせない/動かせるが説明できない、に偏ります。このページを読む → コース2・3で手を動かす → 用語カードで答え合わせ、を往復するのが最短ルートです。

次に読むと良いもの

  • JDLA公式サイト … シラバス・実施日程・推薦図書。まずここで最新情報を確認。
  • 公式テキスト / 問題集 … 範囲が広いので、通読より問題を解いて知らない用語を潰す方が効率的。
  • Kaggleの公開Notebook … このページの用語が実際にどう使われるかを見る。「Titanic EDA」で検索。
11理解チェック

3問クイズ

Q1.1000人に1人しか陽性がいない検査データで、モデルの良し悪しを見るのに不適切な指標は?

正解! 全員を「陰性」と答えるだけで正解率99.9%になってしまいます。このような不均衡データでは、見逃しの少なさを見る再現率や、しきい値に依らないROC-AUCで評価します。

Q2.学習データの正解率は99%なのに、検証データでは65%しか出ません。何が起きている?

正解! 学習データを丸暗記してしまい汎化していない状態です。対策は「データを増やす/特徴量を減らす/正則化を強める/モデルを単純にする」など。逆に両方とも低い場合が未学習です。

Q3.数値の尺度を揃える「標準化」がほぼ不要な手法はどれ?

正解! 決定木系(決定木・ランダムフォレスト・勾配ブースティング)は 値の大小の順序だけで分岐するため、尺度の違いに影響されません。一方、距離を測る手法(k-NN・k-means・SVM)や重みを学習するニューラルネットワークではスケーリングが必須です。
🎖️

全コース制覇!

Data Scout
— Kaggle はじめの一歩 修了 —
Titanic 初提出
OBP > AVG 実証
音楽ジャンル判定
対戦AIエージェント

Kaggleの全体像 → データ探索 → コンペ初提出、そして野球の分析、音楽データでの発見、対戦AIエージェントの提出まで、ぜんぶ自分の手で走り切りました。あなたはもう「Kaggleが分からない人」ではありません。次はぜひ、気になったコンペで Copy & Edit の写Notebookループを回してみてください。