【Kaggle挑戦記】Spaceship Titanic 攻略 #2:まずは「丸腰」で挑む。Baseline構築作戦
1. 今回の作戦:なぜ「何もしない」から始めるのか?
Titanicでの試行錯誤を経て、今回のSpaceship Titanicでは「最初から作り込まない」という戦略をとります。名付けて『Baseline(基準点)構築作戦』です。
あえて高度な前処理や欠損値の精査をスキップし、まずは最小限の手間で予測モデル(ランダムフォレスト)を走らせます。その狙いは以下の通りです。
- 基準(Baseline)の測定: 何もしていない状態のスコアを把握し、後で行う加工に「どれだけ意味があったか」を数値で比較可能にする。
- 不要な特徴量の早期リストラ: ランダムフォレストの「特徴量の重要度(Feature Importance)」を算出し、予測に寄与していない項目をあらかじめ特定して排除する。
- 過学習の抑制: Titanicでは項目を増やしすぎて自爆した反省を活かし、今回は「引き算」の思考で必要最低限のデータを見極める。
まずは現状把握のため、Macのターミナルから乗客名簿のデータ構造を確認します。
2. 【実装】データ構造の基本スキャン
作業はすべてMacのターミナル上で行い、Pythonでデータの概要を抽出しました。
import pandas as pd
# 1. データの読み込み
train = pd.read_csv('train.csv')
print("\n Spaceship Titanic Data Scan Started...\n")
# 2. データ項目(カラム)の一覧と型を確認
print("--- [1] Data Columns & Types ---")
print(train.info())
print("\n" + "="*50 + "\n")
# 3. 欠損値の有無を確認
print("--- [2] Missing Values Scan ---")
null_counts = train.isnull().sum()
print(null_counts[null_counts > 0]) # 欠損がある項目だけを表示
print("\n" + "="*50 + "\n")
# 4. ターゲットの分布を確認
print("--- [3] Target Distribution (Transported) ---")
print(train['Transported'].value_counts())
3. 【実行結果】ターミナルから得られたログ
Macのターミナルで実行した結果、以下の情報が得られました。これが今回の分析のスタート地点となります。
Spaceship Titanic Data Scan Started... --- [1] Data Columns & Types --- <class 'pandas.core.frame.DataFrame'> RangeIndex: 8693 entries, 0 to 8692 Data columns (total 14 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 PassengerId 8693 non-null object 1 HomePlanet 8492 non-null object 2 CryoSleep 8476 non-null object 3 Cabin 8494 non-null object 4 Destination 8511 non-null object 5 Age 8514 non-null float64 6 VIP 8490 non-null object 7 RoomService 8512 non-null float64 8 FoodCourt 8510 non-null float64 9 ShoppingMall 8485 non-null float64 10 Spa 8510 non-null float64 11 VRDeck 8505 non-null float64 12 Name 8493 non-null object 13 Transported 8693 non-null bool dtypes: bool(1), float64(6), object(7) --- [2] Missing Values Scan --- HomePlanet 201 CryoSleep 217 Cabin 199 Destination 182 Age 179 VIP 203 RoomService 181 FoodCourt 183 ShoppingMall 208 Spa 183 VRDeck 188 Name 200 --- [3] Target Distribution (Transported) --- Transported True 4378 False 4315
4. データの「素顔」をどう読み解くか?
出力されたログの注目すべきポイントを整理します。
① 謎の「Object型」の正体
Dtype 列にある object。これはデータが「文字列(テキスト)」であることを意味します。 AIモデルは数値しか扱えないため、この object 項目はそのままでは学習に使用できません。「Earth→1、Europa→2」のように数値に置き換えるか、ダミー変数化する処理が必須となります。全14項目のうち半分を占めるこれら7項目の扱いが、最初の関門です。
② 欠損値(Missing Values)の特異性
--- [2] Missing Values Scan --- の数値が示す通り、今回は非常に特徴的な欠落をしています。
- 「均一な欠損」: 特定の項目に穴が集中しているのではなく、ほぼすべての項目において 200件前後(約2.3%)が欠落しています。これはシステム的な要因で一律にデータが欠落した可能性を示唆しています。
- 連動性の仮説: 欠損数が全項目で近いことから、ある項目が欠けている乗客は、他の項目も同時に欠けているといった「欠損の連動」があるかもしれません。
③ ターゲット(Transported)のバランス
「飛ばされた(True)」のが 4,378人、「残った(False)」のが 4,315人。比率はほぼ 50%:50%。非常にバランスの良いデータであり、純粋にモデルの識別能力がスコアに反映されやすい環境です。
5. 今後のステップ:丸腰での初予測へ
約8,700件というデータ量は、Titanicの10倍近いです。まずはこれらの欠損を中央値や定数で一括補完し、文字列(object)をダミー変数化して、ランダムフォレストによる「Baseline」を叩き出します。最短ルートで予測を完了させ、次の一手を見極めます。
ターミナルに表示されたログを元に、離陸の準備を整えました。次はいよいよ、一切の細工を排除した「丸腰予測」へと向かいます。さあ、頑張ろう!