使う道具とライブラリ

Kaggleで使う道具は、実はそれほど多くありません。8割はこのページのもので足ります。


1. 言語:Python(パイソン)

Kaggleは事実上 Python一択 です(Rも使えますが少数派)。

必要なPythonの知識は、意外と少なめです。

項目必要度例
変数・数値・文字列★★★x = 10
リスト・辞書★★★[1,2,3] / {"a":1}
for文・if文★★★for i in range(5):
関数定義★★☆def f(x): return x*2
ライブラリの読み込み★★★import pandas as pd
クラス定義★☆☆最初は不要
例外処理・非同期処理☆☆☆ほぼ不要

ポイント:Webアプリを作るようなPythonの知識は要りません。 データを読んで、加工して、関数に渡す、という使い方が中心です。

Pythonの学習リソース(日本語)

2. pandas(パンダス)── 表データの操作

最重要ライブラリ。 Kaggleの作業時間の半分はpandasです。Excelをプログラムで操作するイメージ。

import pandas as pd

最頻出のチートシート

# 読み込み・書き出し
df = pd.read_csv("train.csv")
df.to_csv("submission.csv", index=False)

# 全体を見る
df.shape            # (行数, 列数)
df.head(10)         # 先頭10行
df.info()           # 型と欠損
df.describe()       # 統計量
df.columns          # 列名一覧

# 列・行を取り出す
df["Age"]                      # 1列
df[["Age", "Fare"]]            # 複数列
df.loc[0:5, "Age"]             # 名前で指定
df.iloc[0:5, 2]                # 番号で指定

# 条件で絞る
df[df["Age"] > 30]
df[(df["Sex"] == "female") & (df["Pclass"] == 1)]

# 集計
df["Sex"].value_counts()
df.groupby("Sex")["Survived"].mean()
df.groupby(["Sex","Pclass"])["Survived"].agg(["mean","count"])

# 欠損
df.isnull().sum()
df["Age"].fillna(df["Age"].median())
df.dropna(subset=["Embarked"])

# 列を作る・変換する
df["FamilySize"] = df["SibSp"] + df["Parch"] + 1
df["Sex"] = df["Sex"].map({"male":0, "female":1})
df["AgeBand"] = pd.cut(df["Age"], bins=[0,12,20,40,60,100])
df["Title"] = df["Name"].str.extract(r" ([A-Za-z]+)\.")

# 結合
pd.concat([train, test], axis=0)      # 縦に積む
pd.merge(df1, df2, on="id", how="left")  # 横に結合

pandasの日本語リソース

3. NumPy(ナムパイ)── 数値計算

pandasの土台。配列の計算を高速に行います。直接書く量はpandasより少なめ。

import numpy as np

np.mean(x), np.std(x)
np.log1p(x)      # log(1+x)。価格などの歪みをならす定番
np.where(cond, a, b)   # 条件分岐(Excel の IF 関数)
np.sqrt(x)

4. matplotlib / seaborn ── 可視化

import matplotlib.pyplot as plt
import seaborn as sns

sns.histplot(data=train, x="Age", hue="Survived", bins=30)
sns.boxplot(data=train, x="Pclass", y="Fare")
sns.heatmap(train.corr(numeric_only=True), annot=True, cmap="coolwarm")
plt.show()

グラフは「他人に見せるため」ではなく 「自分が気づくため」 に描きます。きれいさは不要です。

5. scikit-learn(サイキット・ラーン)── 機械学習の総合商社

前処理・モデル・検証・評価がひと通り揃っています。読みは「サイキットラーン」、略して sklearn。

from sklearn.model_selection import train_test_split, StratifiedKFold, cross_val_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, roc_auc_score, mean_squared_error
from sklearn.preprocessing import StandardScaler, LabelEncoder

sklearnの統一作法(これが便利)

どのモデルでも 同じ書き方 で使えます。

model = なんらかのモデル(...)
model.fit(X_train, y_train)        # 学習
pred  = model.predict(X_valid)     # 予測(ラベル)
prob  = model.predict_proba(X_valid)[:, 1]   # 予測(確率)

モデルを差し替えるときは1行変えるだけ、というのがsklearnの思想です。

6. LightGBM ── 表データの主力兵器

Microsoft製のGBDT実装。Kaggleの表形式コンペで最も使われているモデルです。

import lightgbm as lgb

model = lgb.LGBMClassifier(
    n_estimators=1000,
    learning_rate=0.05,
    num_leaves=31,
    colsample_bytree=0.8,
    subsample=0.8,
    random_state=0,
)
model.fit(
    X_train, y_train,
    eval_set=[(X_valid, y_valid)],
    eval_metric="auc",
    callbacks=[lgb.early_stopping(100), lgb.log_evaluation(100)],
)

なぜLightGBMが強いのか

  • 精度が高い(GBDTの中でも特に)
  • 速い
  • 欠損値をそのまま扱える
  • スケーリング(標準化)が不要
  • カテゴリ変数も扱える
  • 特徴量重要度が見られる

主なパラメータの意味

パラメータ意味効果
n_estimators木の本数多いほど学習が進む(過学習注意)
learning_rate学習率小さいほど慎重・高精度だが遅い
num_leaves葉の数=木の複雑さ大きいほど表現力↑・過学習↑
max_depth木の深さ上限過学習のブレーキ
subsample行のサンプリング率過学習のブレーキ
colsample_bytree列のサンプリング率過学習のブレーキ
min_child_samples葉の最小サンプル数過学習のブレーキ

兄弟分

  • XGBoost:GBDTの元祖格。安定して強い。
  • CatBoost:カテゴリ変数の扱いが非常に上手い。
  • 3つを混ぜて平均するのが、上位陣の定番です。

7. Optuna ── パラメータ自動調整

日本のPreferred Networks製。Kaggleでの標準ツールです。

import optuna

def objective(trial):
    params = {
        "learning_rate": trial.suggest_float("learning_rate", 0.01, 0.3, log=True),
        "num_leaves": trial.suggest_int("num_leaves", 16, 256),
    }
    model = lgb.LGBMClassifier(**params)
    score = cross_val_score(model, X, y, cv=5, scoring="roc_auc").mean()
    return score

study = optuna.create_study(direction="maximize")
study.optimize(objective, n_trials=50)
print(study.best_params)

公式(日本語ドキュメントあり): https://www.preferred.jp/ja/projects/optuna/

8. ディープラーニング系(画像・テキストをやる段階で)

ライブラリ用途
PyTorchKaggleの画像・NLPコンペの標準。圧倒的シェア
TensorFlow / Kerasもう一方の選択肢
timm画像分類の学習済みモデル集
transformers (Hugging Face)自然言語処理・LLMの標準
albumentations画像のデータ拡張

表データで慣れるまでは不要です。 半年後くらいに戻ってきてください。

9. 環境について

環境特徴おすすめ度
Kaggle Notebook設定不要・無料GPU・データが最初から置かれている★★★ 最初はこれ一択
Google Colab同じく無料。Googleドライブと連携★★☆
ローカル(自分のPC)自由だが環境構築が必要★☆☆ 慣れてから

ローカルでやる場合は、uv や Anaconda でPython環境を作り、VS Codeで .ipynb を開くのが現代的な構成です。ただし 急ぐ必要はまったくありません。


まとめ

  • 言語は Python。必要なのは基本文法だけ。
  • pandas が作業の中心。チートシートを手元に置く。
  • 表データなら scikit-learn + LightGBM でほぼ戦える。
  • 可視化は matplotlib / seaborn、調整は Optuna。
  • 画像・テキストに進むときに PyTorch を学べばよい。