ステップ12:つまずき辞典

困ったときだけ開いてください。 上から読む必要はありません。エラーメッセージの一部を、ブラウザの検索(Command + F)でこのページから探すのが早いです。


まず試す3つ(これで半分は直ります)

  1. 上から順に全部実行し直す … 上部メニューの Run All
  2. セッションを再起動する … 画面右下の電源マーク → Restart Session → その後 Run All
  3. ステップ13の完成コードを貼る … 完成コード全文 を新しいセルに貼って実行

💡 Notebookは「上のセルの結果を、下のセルが引き継ぐ」仕組みです。セルを飛ばしたり、順番を入れ替えて実行すると、人間には見えない形で状態がズレます。困ったら Run All。これが鉄則です。


エラーメッセージ別の対処

NameError: name 'xxx' is not defined

意味:xxx という名前のものが、まだ作られていない。

xxx対処
pdimport pandas as pd を実行していない
train / testステップ2のセルを実行していない
X / yステップ7のセルを実行していない
modelステップ8のセルを実行していない

→ Run All で上から通せば直ります。

FileNotFoundError: /kaggle/input/...

意味:そのファイルが見つからない。

import os
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))

これを実行して、実際のパスを確認してください。何も出ない場合は、Notebookにデータが紐づいていません。右側パネルの Input → + Add Input から titanic を追加するか、コンペページの Code → New Notebook から作り直してください。

ValueError: could not convert string to float: 'male'

意味:文字のまま機械学習に渡している。

→ ステップ7の prepare() を実行し、X = prepare(...) で作り直してください。確認コード:

X.dtypes      # object という型が残っていたら、その列が文字のまま

ValueError: Input contains NaN

意味:空欄が残っている。

→ どこが空欄か確認:

print(X.isnull().sum())
print(X_test.isnull().sum())

test の Fare に空欄が1つあるのを忘れがちです。fillna() の行を確認してください。

KeyError: 'xxx'

意味:その名前の列が存在しない。

→ 列名のスペルを確認してください。大文字・小文字も区別されます。

print(train.columns.tolist())

よくある間違い:Survive(正しくは Survived)、Pclass を PClass、Embarked を Embark。

SyntaxError: invalid syntax

意味:コードの書き方が壊れている。

→ コピペのときに行が欠けた可能性が高いです。該当セルを全部消して、貼り直してください。日本語の全角スペースが混ざっていても起きます。

IndentationError

意味:行頭の字下げがおかしい。

→ def prepare(df): の中身は、すべて半角スペース4つ分の字下げが必要です。貼り直すのが早いです。

MemoryError / セッションが落ちる

→ 右下の電源マーク → Restart Session。Titanicのデータは小さいので、通常は起きません。


提出まわりのトラブル

Submission Scoring Error

提出ファイルの形が違います。この5つを順番に確認してください。

sub = pd.read_csv("submission.csv")
print("行数      :", len(sub))            # → 418 であること
print("列名      :", sub.columns.tolist()) # → ['PassengerId', 'Survived'] であること
print("空欄      :", sub.isnull().sum().sum())  # → 0 であること
print("Survivedの値:", sub["Survived"].unique())  # → 0 と 1 だけであること
print(sub.head())
症状原因
行数が418でないtest ではなく train に対して予測している
列が3つある(Unnamed: 0 がある)index=False を付け忘れた
列名が違うPassengerId Survived の綴り・大文字小文字を確認
Survivedが小数になっているpredict_proba を使っている。predict を使うか .round().astype(int) する

Output に submission.csv が出てこない

→ Save Version → Save & Run All (Commit) で保存していますか?Quick Save ではファイルが作られないことがあります。

Submit ボタンが押せない / 見つからない

→ Notebookの実行(Save & Run All)が完了していない可能性があります。緑のチェックが付くまで待ってください。→ コンペに Join していない可能性もあります。コンペページを確認してください。

提出したのにスコアが出ない

→ 採点に数十秒かかることがあります。ページを再読み込みしてください。


動くけれど結果がおかしいとき

CVスコアが 1.0(満点)になる

正解が材料に混ざっています(リーク)。 features の中に Survived が入っていないか確認してください。

毎回スコアが変わる

random_state=0 を書き忘れています。モデルを作るときに必ず指定してください。

CVは高いのに提出スコアが低い

これは 正常 です。CV 0.82 → 提出 0.77 くらいの差は普通に出ます。ただし差が0.1以上ある場合は、リークか、trainとtestの処理が食い違っている可能性があります。prepare() を train と test の両方に、まったく同じように適用しているか確認してください。

予測が全部0(または全部1)になる

print(pd.Series(pred).value_counts())

極端に偏っている場合、特徴量が壊れている可能性があります。X_test.head() を見て、値がおかしくないか確認してください。


画面・操作のトラブル

症状対処
セルが [*] のまま進まない実行中です。初回は30秒ほどかかります
ずっと止まっている右下の電源マーク → Restart Session
GPUが選べない電話番号認証(Settings → Phone Verification)が必要。この章では不要です
コードが消えた右上の Save Version の履歴から、過去バージョンを復元できます
日本語が文字化けするグラフの日本語は化けます。ラベルは英語にすると回避できます

それでも解決しないとき

  1. エラーメッセージの最後の1行をコピーして検索する。 日本語の解説記事が高確率で出ます。
  2. AIに貼り付けて聞く。 「このエラーの意味と直し方を日本語で教えて」と添えるだけで十分です。
  3. ステップ13の完成コードを丸ごと貼って、動く状態に戻す。 一度リセットするのが最速のこともあります。

エラーは失敗ではありません。Kagglerは1日に何十回もエラーを出します。エラーが出る=手が動いている証拠です。