機械学習モデルの構築において、特徴量の分析に注目が集まりがちですが、実はターゲット変数(予測対象)の分析こそがモデル設計の起点です。ターゲットの分布が偏っていれば学習アルゴリズムの選択が変わり、クラス不均衡があれば前処理の戦略が変わります。この記事では、ターゲット変数を多角的に分析する手法と、Qast の自動ターゲット分析機能の活用方法を詳しく解説します。
ターゲット分析とは — なぜ最初に行うべきなのか
ターゲット分析とは、予測対象となる変数の統計的性質を把握するプロセスです。EDA(探索的データ分析)の中でも最初に行うべきステップとされています。理由は明確で、ターゲットの性質がモデルの設計全体に影響するからです。例えば、分類タスクでクラス比率が 95:5 であれば、精度(Accuracy)だけでは正しく評価できません。回帰タスクでターゲットが強い正の歪みを持つ場合、対数変換を適用するかどうかの判断が必要です。ターゲット分析を怠ると、本番環境で想定外の精度劣化に見舞われるリスクがあります。
ターゲット分析は EDA の最初のステップとして行いましょう。ターゲットの性質を理解してから特徴量分析に進むことで、「この特徴量はターゲットの予測に役立つか?」という視点を持った分析ができます。
分類タスクのターゲット分析 — クラス分布を把握する
分類タスクでは、各クラスのサンプル数とその比率を確認することが最重要です。2 クラス分類の場合、ポジティブクラス(予測したい事象)とネガティブクラスの比率を計算します。多クラス分類の場合は、すべてのクラスの出現頻度を棒グラフで可視化し、最頻クラスと最少クラスの比率(不均衡比率)を算出します。不均衡比率が 10:1 を超えると、標準的なアルゴリズムではマイノリティクラスを正しく学習できない可能性が高まります。
import pandas as pd
import matplotlib.pyplot as plt
# ターゲット変数のクラス分布を確認
df = pd.read_csv("dataset.csv")
target = "churn"
# クラスごとのサンプル数
class_counts = df[target].value_counts()
print("クラス分布:")
print(class_counts)
print(f"\n不均衡比率: {class_counts.max() / class_counts.min():.1f}:1")
# 可視化
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
class_counts.plot(kind="bar", ax=axes[0], color=["#4A90D9", "#E74C3C"])
axes[0].set_title("クラス別サンプル数")
axes[0].set_ylabel("サンプル数")
class_counts.plot(kind="pie", ax=axes[1], autopct="%1.1f%%",
colors=["#4A90D9", "#E74C3C"])
axes[1].set_title("クラス比率")
plt.tight_layout()
plt.show()不均衡データの影響と対処戦略
クラス不均衡がモデルに与える影響は深刻です。多くの分類アルゴリズムは多数派クラスに偏った予測を行い、全体の精度は高く見えてもマイノリティクラスの再現率(Recall)が極端に低くなります。例えば、不正検知のタスクで「不正でない(99%)」「不正(1%)」という分布の場合、すべてを「不正でない」と予測するだけで精度 99% が達成できてしまいますが、肝心の不正は一切検知できません。
- 1
SMOTE(Synthetic Minority Over-sampling Technique)
マイノリティクラスのサンプル間を線形補間し、合成データを生成するオーバーサンプリング手法です。単純な複製と異なり、新しいパターンを生成するため過学習を軽減できます。ただし、ノイズデータの近傍に合成データが生成されるリスクがあるため、外れ値除去を先に行うことが推奨されます。
- 2
ランダムアンダーサンプリング
多数派クラスからランダムにサンプルを除去して均衡化する手法です。計算コストが低く、大規模データに適しています。ただし、情報量が減少するため、データ量が少ない場合は精度が低下する可能性があります。
- 3
クラス重み付け(class_weight)
アルゴリズムの損失関数でマイノリティクラスに大きな重みを付ける手法です。データ自体は変更せず、学習時のペナルティを調整します。scikit-learn の多くのアルゴリズムは class_weight='balanced' パラメーターをサポートしています。
- 4
閾値の調整
モデルの予測確率の閾値をデフォルトの 0.5 から変更する手法です。不均衡データでは閾値を下げることで、マイノリティクラスの再現率を向上させることができます。PR 曲線(Precision-Recall 曲線)を参考に最適な閾値を決定します。
回帰タスクのターゲット分析 — 分布の歪みと外れ値
回帰タスクでは、ターゲット変数の連続的な分布を分析します。まずヒストグラムと箱ひげ図でターゲットの全体像を把握し、次に歪度(Skewness)と尖度(Kurtosis)を計算して分布の非対称性と裾の重さを数値化します。歪度の絶対値が 1 を超える場合、分布は大きく歪んでいると判断され、対数変換や Box-Cox 変換を適用することで予測精度が向上する場合があります。
- 1
歪度(Skewness)の確認
歪度が 0 に近ければ正規分布に近い対称な形状、正の値なら右裾が長い(高額な値が少数ある)分布、負の値なら左裾が長い分布です。住宅価格や年収のような変数は正の歪みを持つことが一般的です。
- 2
外れ値の検出
IQR 法(四分位範囲の 1.5 倍を超える値)やZ スコア法(平均から標準偏差の 3 倍を超える値)でターゲット変数の外れ値を検出します。外れ値は予測モデルの損失関数に大きな影響を与えるため、その存在と割合を把握しておくことが重要です。
- 3
変換の検討
ターゲットの分布が正規分布から大きく外れている場合、対数変換(log1p)、平方根変換(sqrt)、Box-Cox 変換を適用してから学習し、予測時に逆変換する手法が有効です。ただし、ゼロや負の値がある場合は対数変換が適用できないため注意が必要です。
import numpy as np
from scipy import stats
target_values = df["price"]
# 基本統計量
print(f"平均値: {target_values.mean():.2f}")
print(f"中央値: {target_values.median():.2f}")
print(f"標準偏差: {target_values.std():.2f}")
print(f"歪度: {target_values.skew():.2f}")
print(f"尖度: {target_values.kurtosis():.2f}")
# 正規性検定
stat, p_value = stats.shapiro(target_values.sample(min(5000, len(target_values))))
print(f"\nShapiro-Wilk 検定: stat={stat:.4f}, p={p_value:.4e}")
if p_value < 0.05:
print("→ 正規分布ではない(p < 0.05)")
# 対数変換の効果を確認
log_values = np.log1p(target_values)
print(f"\n対数変換後の歪度: {log_values.skew():.2f}")ターゲットと特徴量の相関ランキング
ターゲット分析の重要な側面として、各特徴量がターゲットとどの程度関連しているかを定量化し、ランキング形式で把握することがあります。数値特徴量に対しては Pearson 相関係数と Spearman 順位相関係数を計算し、カテゴリ特徴量に対しては相互情報量(Mutual Information)を用います。相関が高い特徴量は予測に有用な候補であり、相関がほぼゼロの特徴量はノイズとなる可能性があります。
- 1
Pearson 相関係数
ターゲットと各数値特徴量の線形関係の強さを -1 から +1 で表します。+1 に近いほど正の線形関係、-1 に近いほど負の線形関係が強いことを示します。ただし、非線形な関係は検出できません。
- 2
Spearman 順位相関
値そのものではなく順位に基づいて相関を計算するため、非線形でも単調な関係(一方が増えれば他方も増える)を検出できます。外れ値にも頑健です。
- 3
相互情報量(Mutual Information)
2 変数間の統計的依存性を情報理論に基づいて定量化する指標です。線形・非線形を問わずあらゆる関係を検出でき、カテゴリ変数にも適用可能です。値が大きいほど、その特徴量はターゲットの予測に有用であることを示します。
特徴量の有用性スコア
相関係数だけでは特徴量の有用性を正確に評価できません。例えば、2 つの特徴量がターゲットと同程度の相関を持っていても、片方は欠損率が 50% で、もう片方は欠損なしかもしれません。Qast では、相関の強さ、欠損率、カーディナリティ(一意な値の数)、分散などを総合的にスコアリングし、「この特徴量はモデル学習にどの程度有用か」を 0〜1 のスコアで評価します。有用性スコアが低い特徴量は、学習データから除外することで、モデルの学習速度と汎化性能を向上できる可能性があります。
相関が高い特徴量が必ずしも良い特徴量とは限りません。ターゲットとの相関が 0.99 を超えるような場合は、ターゲットリーケージ(予測結果の情報が漏れている)の疑いがあります。Qast ではリーケージの可能性がある場合、警告が表示されます。
クラス別の特徴量分布 — 分類タスクの深掘り
分類タスクでは、各特徴量がクラスごとにどのように分布しているかを比較することが重要です。ターゲットのクラスによって特徴量の分布が明確に分離していれば、その特徴量はモデルの判別に大きく貢献します。逆に、クラス間で分布がほぼ重なっている特徴量は、判別力が低いと考えられます。箱ひげ図やバイオリンプロットを使えば、クラス間の分布の違いを視覚的に確認できます。
from sklearn.feature_selection import mutual_info_classif
# 特徴量とターゲットの相関ランキング
X = df.drop(columns=[target])
y = df[target]
# 数値特徴量の相関係数
numeric_cols = X.select_dtypes(include=["number"]).columns
correlations = X[numeric_cols].corrwith(y).abs().sort_values(ascending=False)
print("ターゲットとの相関ランキング(上位10件):")
print(correlations.head(10))
# 相互情報量(カテゴリ変数も含む)
X_encoded = pd.get_dummies(X, drop_first=True)
mi_scores = mutual_info_classif(X_encoded.fillna(0), y, random_state=42)
mi_ranking = pd.Series(mi_scores, index=X_encoded.columns).sort_values(ascending=False)
print("\n相互情報量ランキング(上位10件):")
print(mi_ranking.head(10))評価指標の選び方 — ターゲットの性質に応じた判断
ターゲット分析の結果は、モデルの評価指標の選択にも直結します。分類タスクで均衡データなら Accuracy が使えますが、不均衡データでは F1 スコア、AUC-ROC、PR-AUC(Precision-Recall AUC)が適切です。回帰タスクでターゲットに外れ値が多い場合は、RMSE よりも MAE(平均絶対誤差)の方が頑健です。ターゲットのスケールが大きく異なるデータセット間で比較する場合は、MAPE(平均絶対パーセンテージ誤差)や R2 スコアが有用です。
- 1
均衡データの分類 → Accuracy / F1
クラス比率がおおよそ均等な場合は、Accuracy で全体の正解率を評価し、F1 スコアで Precision と Recall のバランスも確認します。
- 2
不均衡データの分類 → PR-AUC / F1(マイノリティ)
不均衡データでは PR-AUC(Precision-Recall 曲線の下の面積)が最も信頼性の高い指標です。マイノリティクラスの F1 スコアも重要な補助指標になります。
- 3
回帰(外れ値あり) → MAE / Huber Loss
外れ値の影響を受けにくい MAE や Huber Loss を主指標にし、RMSE は補助的に確認します。
- 4
回帰(正の歪み) → RMSLE
ターゲットが正の歪みを持つ場合(住宅価格、売上高など)、RMSLE(Root Mean Squared Logarithmic Error)を使うと、大きな値の誤差と小さな値の誤差を均等に評価できます。
Qast のターゲット分析機能
Qast では、CSV をアップロードしてターゲット列を指定するだけで、上記のターゲット分析が自動実行されます。分類タスクの場合はクラス分布の棒グラフ・不均衡比率・マイノリティクラスの強調表示が、回帰タスクの場合はヒストグラム・箱ひげ図・歪度と尖度の数値が自動生成されます。さらに、特徴量とターゲットの相関ランキングが視覚的に表示され、有用性スコアの低い特徴量には警告アイコンが付与されます。不均衡データが検出された場合は、Qast が自動的に SMOTE やクラス重み付けを適用するため、ユーザーが手動で前処理を行う必要はありません。
Qast のターゲット分析レポートは、チームメンバーや上司への説明資料としても活用できます。ターゲットの性質と対応戦略がレポートとして可視化されるため、「なぜこの前処理が必要なのか」を非エンジニアにも説明しやすくなります。


