はじめに
機械学習モデルを作ったはいいけれど「なかなか精度が上がらない」という悩みは、初心者だけでなく経験者にもよくあることです。
僕もSignateのコンペや実務のプロジェクトで何度も壁にぶつかりました。そこで試行錯誤しながら学んだ「精度を上げるための実践的なコツ」を10個まとめます。
① まずデータを徹底的に理解する
モデルを急いで作りたくなりますが、最初にデータの中身をしっかり確認することが結果的に最短ルートです。
- 各特徴量の分布を確認する(ヒストグラム・箱ひげ図)
- 目的変数との相関を確認する
- 欠損値・外れ値の存在を把握する
- カテゴリ変数の種類数を確認する
import pandas as pd
import matplotlib.pyplot as plt
df.describe() # 基本統計量
df.isnull().sum() # 欠損値の数
df.hist(figsize=(15, 10)) # 分布の確認
plt.show()
② 前処理を丁寧にやる
「前処理が8割」とも言われるように、前処理の質がモデルの精度を大きく左右します。欠損値・外れ値・スケーリング・エンコーディングを適切に行うだけで、精度が大きく変わることがあります。
③ ベースラインを素早く作る
最初からモデルを複雑にしようとせず、まずシンプルなモデルでベースラインを作りましょう。ロジスティック回帰や決定木など、シンプルなモデルから始めることで、後から複雑なモデルと比較しやすくなります。
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# シンプルなベースライン
baseline = RandomForestClassifier(n_estimators=100, random_state=42)
baseline.fit(X_train, y_train)
print(f"ベースライン精度: {accuracy_score(y_test, baseline.predict(X_test)):.3f}")
④ 交差検証で評価する
train_test_splitだけで評価すると、分け方によって結果がブレます。k分割交差検証を使うことで、安定した評価が得られます。また、データリークにも注意しましょう。
⑤ 特徴量エンジニアリングを試す
アルゴリズムを変えてもスコアが上がらないとき、特徴量の工夫が突破口になることがあります。日時データから曜日・時間帯を生成したり、2変数の比や積を新しい特徴量として追加してみましょう。
⑥ ハイパーパラメータをチューニングする
Optunaはベイズベースのハイパーパラメータチューニングツールです。GridSearchよりも効率的に最適なパラメータを探索できます。
import optuna
def objective(trial):
n_estimators = trial.suggest_int('n_estimators', 50, 500)
max_depth = trial.suggest_int('max_depth', 3, 20)
model = RandomForestClassifier(
n_estimators=n_estimators,
max_depth=max_depth,
random_state=42
)
score = cross_val_score(model, X_train, y_train, cv=5).mean()
return score
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=100)
print(f"最良パラメータ: {study.best_params}")
⑦ アンサンブル学習を試す
複数のモデルの予測を組み合わせることで、単体より精度が上がります。代表的な方法はVoting(多数決)とStacking(予測値を新しい特徴量にする)です。
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
voting = VotingClassifier(
estimators=[
('rf', RandomForestClassifier(n_estimators=100)),
('lr', LogisticRegression()),
('svc', SVC(probability=True))
],
voting='soft'
)
voting.fit(X_train, y_train)
⑧ 不均衡データに対処する
クラスのデータ数に偏りがある場合(例:正常品99%・不良品1%)、精度が高く見えても実は少数クラスを全く予測できていないことがあります。
- 評価指標をAccuracyではなくF1スコアやAUCに変更する
- class_weight=’balanced’を設定する
- オーバーサンプリング(SMOTE)を使う
from imblearn.over_sampling import SMOTE
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)
⑨ 評価指標を問題に合わせて選ぶ
精度(Accuracy)が必ずしも正しい評価指標とは限りません。問題の性質に合わせて指標を選ぶことが重要です。
- 不均衡データ → F1スコア・AUC
- 偽陰性のコストが高い(病気の見逃し)→ 再現率(Recall)
- 偽陽性のコストが高い(誤検知)→ 適合率(Precision)
- 回帰問題 → RMSE・MAE・R²
⑩ LightGBMを試す
テーブルデータであれば、LightGBMは最も精度が出やすいアルゴリズムのひとつです。XGBoostよりも高速で、大規模データでも扱いやすいです。
import lightgbm as lgb
model = lgb.LGBMClassifier(
n_estimators=1000,
learning_rate=0.05,
random_state=42
)
model.fit(
X_train, y_train,
eval_set=[(X_test, y_test)],
callbacks=[lgb.early_stopping(50)]
)
まとめ
精度向上のコツを10個挙げましたが、すべてを一度にやろうとすると混乱します。まずはデータ理解→前処理→ベースライン→交差検証の流れをしっかり固めることが大切です。その上で、特徴量エンジニアリングやアンサンブルを少しずつ試してみてください。
自分らしく働けるエンジニア転職を目指すなら【strategy career】
年収1000万・残業月30時間以下・リモート可の求人多数
※アフィリエイト広告を含みます
![]()


コメント