STEP 4:機械学習プロジェクトのワークフロー

🤖 STEP 4: 機械学習プロジェクトのワークフロー

問題定義からデプロイまで、機械学習プロジェクトの全体像を理解します

📋 このステップで学ぶこと

  • 機械学習プロジェクトの9つのステップ
  • 各ステップの重要性と役割
  • 実務での注意点
  • よくある失敗パターンと対策

練習問題: 2問

🎯 1. 機械学習プロジェクトの全体像

機械学習というと「モデルを作る」ことに注目しがちですが、実際のプロジェクトではモデル作成は全体の一部に過ぎません。

成功する機械学習プロジェクトには、体系的なワークフローがあります。9つのステップを順番に見ていきましょう。

【機械学習プロジェクトの9つのステップ】 ■ STEP 1: 問題定義(Problem Definition) 何を解決したいのか明確にする ■ STEP 2: データ収集(Data Collection) 必要なデータを集める ■ STEP 3: EDA(Exploratory Data Analysis) データを理解する・可視化する ■ STEP 4: データ前処理(Data Preprocessing) データをきれいにする ■ STEP 5: モデル選択(Model Selection) どのアルゴリズムを使うか決める ■ STEP 6: モデル訓練(Model Training) データで学習させる ■ STEP 7: モデル評価(Model Evaluation) 性能を測定する ■ STEP 8: モデル改善(Model Improvement) 精度を向上させる ■ STEP 9: デプロイ(Deployment) 実際に使えるようにする
💡 最も重要なポイント:データが80%

機械学習プロジェクトの約80%の時間はデータの準備に費やされます。

「モデルを作る」のは全体の20%程度。残りの80%は、データ収集、EDA、前処理に使います。

「データの質がモデルの性能を決める」ということを忘れないでください。

🔄 プロジェクトの流れをイメージする

例:ECサイトの売上予測プロジェクト

STEP 1(問題定義):
「来月の商品別売上を予測し、在庫を最適化したい」

STEP 2(データ収集):
過去3年分の売上データ、商品情報、季節要因、キャンペーン情報を集める

STEP 3(EDA):
売上の傾向、季節性、人気商品のパターンを可視化して理解

STEP 4(前処理):
欠損値の補完、異常値の除去、カテゴリ変数のエンコーディング

STEP 5-7(モデル作成・評価):
ランダムフォレストで予測モデルを作成、精度を評価

STEP 8(改善):
特徴量を追加、ハイパーパラメータを調整して精度向上

STEP 9(デプロイ):
毎日自動で予測を実行し、在庫管理システムに連携

📌 2. STEP 1: 問題定義(Problem Definition)

🔍 問題定義とは?

「何を解決したいのか」「何を予測したいのか」を明確にするステップです。

これが曖昧だと、プロジェクト全体が迷走します。問題定義は最も重要なステップと言っても過言ではありません。

✅ 問題定義で明確にすべき5つのこと
  • ビジネス目標:何のために機械学習を使うのか?
  • 成功の定義:どうなれば成功と言えるのか?(数値で)
  • 問題のタイプ:回帰?分類?クラスタリング?
  • 制約条件:予算、時間、必要な精度
  • 利用シーン:誰が、いつ、どのように使うのか?

❌ 悪い問題定義 vs ✅ 良い問題定義

【悪い問題定義の例】 ❌ 「売上を予測したい」 → 何の売上?どのくらいの精度で?いつまでに? ❌ 「AIで何かできないか」 → 課題が明確でない。手段が目的になっている ❌ 「とりあえず機械学習を使ってみよう」 → ビジネス価値が不明 — 【良い問題定義の例】 ✅ 「来月の商品別の売上を予測し、在庫を最適化したい。 予測精度(RMSE)は過去の平均誤差より20%改善を目指す。 3ヶ月以内に本番環境で稼働させる。」 → 具体的で、測定可能で、期限がある! ✅ 「顧客の離脱を30日前に予測し、離脱防止施策を打ちたい。 Recall 80%以上を目標とする。 毎週月曜日に予測結果をマーケティングチームに共有する。」 → 利用シーンまで明確!
⚠️ よくある失敗:「手段」と「目的」の混同

「機械学習を使うこと」が目的になっていませんか?

機械学習はあくまで「手段」です。本当の目的は「売上向上」「コスト削減」「顧客満足度向上」などのビジネス価値です。

もしルールベースで解決できるなら、わざわざ機械学習を使う必要はありません。

📊 3. STEP 2: データ収集(Data Collection)

🔍 データ収集とは?

機械学習に必要なデータを集めるステップです。「どんなデータが必要か」「どこから集めるか」を考えます。

📦 データの入手先
  • 社内データ:売上記録、顧客情報、アクセスログ、センサーデータなど
  • 公開データ:政府統計、Kaggleのデータセット、UCI ML Repositoryなど
  • 外部データ:天気データ、人口統計、経済指標、SNSデータなど
  • 新規収集:アンケート、Web スクレイピング、IoTセンサーなど

✅ データ収集で確認すべきチェックリスト

【データ収集のチェックリスト】 □ データ量は十分か? → 教師あり学習なら最低でも数百〜数千件 → ディープラーニングなら数万件以上 □ データの質は良いか? → 欠損値はどのくらいあるか → 異常値や外れ値はないか → 重複データはないか □ ラベル(正解)はあるか? → 教師あり学習の場合は必須 → ラベル付けのコストはどのくらいか □ データは偏っていないか? → 一部のクラスが極端に少なくないか → 特定の期間だけのデータになっていないか □ データは最新か? → 古すぎるデータは現状を反映していない可能性 □ データの利用は許可されているか? → プライバシー、著作権、利用規約の確認
💡 データ収集の鉄則:Garbage In, Garbage Out

「ゴミを入れれば、ゴミが出る」

どんなに優れたアルゴリズムを使っても、データの質が悪ければ良い結果は出ません。

逆に、シンプルなアルゴリズムでも、良質なデータがあれば素晴らしい結果が出ることもあります。

データ収集には十分な時間をかけましょう。

🔍 4. STEP 3: EDA(探索的データ分析)

🔍 EDAとは?

EDA(Exploratory Data Analysis:探索的データ分析)は、データを可視化して、特徴やパターンを理解するステップです。

「敵を知り己を知れば百戦危うからず」と言いますが、機械学習では「データを知れば、良いモデルが作れる」のです。

🎯 EDAでやること
  • データの概要把握:行数、列数、データ型を確認
  • 統計量の確認:平均、中央値、最大値、最小値、標準偏差
  • 欠損値の確認:どの列に何%欠損しているか
  • 分布の可視化:ヒストグラム、箱ひげ図で分布を確認
  • 相関の確認:変数同士の関係性を相関行列で確認
  • 異常値の検出:明らかにおかしいデータを発見
  • パターンの発見:季節性、トレンド、グループ間の差

📊 EDAで使うPythonコードの例

# 必要なライブラリをインポート import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # データ読み込み df = pd.read_csv(‘data.csv’) # ===== 基本情報の確認 ===== # データ型と欠損値 print(df.info()) # 統計量 print(df.describe()) # 最初の5行を確認 print(df.head()) # ===== 可視化 ===== # ヒストグラム(数値の分布) df[‘price’].hist(bins=30) plt.title(‘価格の分布’) plt.show() # 箱ひげ図(外れ値の確認) sns.boxplot(x=df[‘price’]) plt.title(‘価格の箱ひげ図’) plt.show() # 相関行列(変数間の関係) sns.heatmap(df.corr(), annot=True, cmap=’coolwarm’) plt.title(‘相関行列’) plt.show()
👀 EDAで見つけるべきこと
  • データのパターン:季節性、曜日効果、トレンドなど
  • 外れ値:異常に大きい・小さい値(入力ミス?実際の異常?)
  • 不均衡なデータ:一部のクラスが極端に少ない(例:不正取引は全体の0.1%)
  • 多重共線性:変数同士が強く相関している(重複した情報)
  • 予測に役立ちそうな特徴:ターゲットと相関が高い変数

🧹 5. STEP 4: データ前処理(Data Preprocessing)

🔍 データ前処理とは?

データをきれいにして、機械学習で使える形に整えるステップです。

これが機械学習プロジェクトで最も時間がかかる作業です。地味ですが、モデルの性能に直結する重要な作業です。

【データ前処理でやること】 ■ 1. 欠損値の処理 ・行を削除する ・平均値・中央値で埋める ・前後の値で補完する ・「欠損」という新しいカテゴリを作る ■ 2. 異常値の処理 ・削除する ・上限・下限値で置き換える(クリッピング) ・対数変換で影響を緩和する ■ 3. データ型の変換 ・文字列 → 数値 ・日付 → 年、月、日、曜日などの数値 ■ 4. スケーリング(正規化) ・StandardScaler(平均0、標準偏差1に変換) ・MinMaxScaler(0〜1の範囲に変換) ■ 5. カテゴリ変数のエンコーディング ・Label Encoding(カテゴリを0, 1, 2…に変換) ・One-Hot Encoding(ダミー変数化) ■ 6. 特徴量エンジニアリング ・新しい特徴量の作成(例:年齢 × 収入) ・不要な特徴量の削除

📊 前処理のPythonコード例

from sklearn.preprocessing import StandardScaler, LabelEncoder from sklearn.impute import SimpleImputer import pandas as pd # ===== 欠損値の処理 ===== # 数値は平均で埋める imputer = SimpleImputer(strategy=’mean’) df[‘age’] = imputer.fit_transform(df[[‘age’]]) # ===== スケーリング ===== scaler = StandardScaler() df[‘age_scaled’] = scaler.fit_transform(df[[‘age’]]) # ===== カテゴリ変数のエンコーディング ===== # Label Encoding le = LabelEncoder() df[‘gender_encoded’] = le.fit_transform(df[‘gender’]) # One-Hot Encoding df = pd.get_dummies(df, columns=[‘category’])
💡 データ前処理の重要性

「データの80%はゴミ」と言われるほど、現実のデータは汚れています。

丁寧に前処理することで、モデルの精度が20〜30%向上することも珍しくありません。

前処理をおろそかにして「モデルを改善しよう」としても、限界があります。

🤖 6. STEP 5-7: モデル選択・訓練・評価

STEP 5: モデル選択

どのアルゴリズムを使うかを決めます。最初から複雑なモデルを使うのではなく、シンプルなモデルから始めるのがポイントです。

🎯 問題タイプ別のアルゴリズム選択

回帰(数値予測)なら:

  • まず:線形回帰(シンプルで解釈しやすい)
  • 次に:Ridge回帰、Lasso回帰(正則化あり)
  • さらに:ランダムフォレスト回帰、XGBoost

分類なら:

  • まず:ロジスティック回帰(シンプルで解釈しやすい)
  • 次に:決定木(可視化できる)
  • さらに:ランダムフォレスト、XGBoost、SVM

STEP 6: モデル訓練

from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier # データを訓練用とテスト用に分割 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42 ) # モデルを作成 model = RandomForestClassifier(n_estimators=100, random_state=42) # 訓練データで学習 model.fit(X_train, y_train) # テストデータで予測 y_pred = model.predict(X_test)

STEP 7: モデル評価

【評価指標の選び方】 ■ 回帰の場合: ・MAE(Mean Absolute Error):平均的な誤差の大きさ ・RMSE(Root Mean Squared Error):大きな誤差を重視 ・R² Score:説明できる分散の割合(1に近いほど良い) ■ 分類の場合: ・Accuracy(正解率):全体の正解割合 ・Precision(適合率):「陽性」と予測したうち本当に陽性の割合 ・Recall(再現率):本当に陽性のうち正しく予測できた割合 ・F1 Score:PrecisionとRecallの調和平均 ・ROC-AUC:分類の総合的な性能
⚠️ 最も重要な注意点:過学習に気をつける

訓練データでの精度だけを見てはいけません!

訓練データで99%の精度でも、テストデータでは60%ということもあります。

必ず未知のデータ(テストデータ)での性能を確認しましょう。

⚙️ 7. STEP 8: モデル改善(Model Improvement)

🔧 モデル改善の手法

【モデル改善の5つのアプローチ】 ■ 1. 特徴量エンジニアリング ・新しい特徴量を作る(例:面積÷部屋数 = 部屋あたり面積) ・不要な特徴量を削除する ・特徴量の組み合わせを試す ■ 2. ハイパーパラメータチューニング ・Grid Search:全組み合わせを試す ・Random Search:ランダムに組み合わせを試す ・ベイズ最適化(Optuna):効率的に探索 ■ 3. アルゴリズムの変更 ・別のモデルを試す ・複数のモデルを比較する ■ 4. アンサンブル学習 ・複数のモデルを組み合わせる ・バギング、ブースティング、スタッキング ■ 5. データの追加・改善 ・より多くのデータを集める ・データの質を向上させる
💡 改善の優先順位(効果が高い順)

1. データの質と量を改善(最も効果的!)
良いデータがあれば、シンプルなモデルでも高精度

2. 特徴量エンジニアリング
データの「どこに着目するか」を改善

3. アルゴリズムの変更
問題に合った手法を選ぶ

4. ハイパーパラメータチューニング(最後に)
微調整で数%の改善

実務でのヒント

多くの場合、ハイパーパラメータチューニングで得られる改善は数%程度です。

一方、良いデータや良い特徴量を追加すると、10〜30%の改善が得られることもあります。

「モデルのチューニングに時間をかけすぎて、データ改善がおろそかになる」のはよくある失敗です。

🚀 8. STEP 9: デプロイ(Deployment)

🔍 デプロイとは?

モデルを実際のビジネスで使えるようにするステップです。

Jupyter Notebookで動くだけでは、ビジネスでは使えません。実際のシステムに組み込んで、継続的に運用する必要があります。

【デプロイの3つの方法】 ■ 1. バッチ予測 ・定期的にまとめて予測を実行 ・例:毎日深夜に翌日の売上を予測 ・メリット:実装が簡単、リソース効率が良い ■ 2. リアルタイム予測(オンライン予測) ・ユーザーのアクセスごとに予測 ・例:ECサイトでの商品推薦、不正検知 ・メリット:即座に結果が得られる ■ 3. APIサービス化 ・Webサービスとして公開 ・他のシステムから呼び出せるようにする ・例:Flask、FastAPI、AWS SageMaker

📊 デプロイ後に考えるべきこと

🎯 運用で重要な4つのポイント
  • モニタリング:モデルの性能を常に監視する
  • 再学習:定期的にモデルを更新する(週次、月次など)
  • バージョン管理:モデルのバージョンを記録し、いつでも戻れるように
  • ロールバック:問題があれば前のバージョンに戻す
⚠️ デプロイ後に起こる問題

モデルの劣化(Model Decay):
時間が経つと精度が落ちていきます。定期的な再学習が必要です。

データドリフト(Data Drift):
入力データの傾向が変わります。例:コロナ禍で消費者行動が変化

コンセプトドリフト(Concept Drift):
予測対象自体の意味が変わります。例:「人気商品」の定義が変化

定期的なモニタリングと再学習が必須!

🔄 9. 実務での注意点

機械学習プロジェクトは反復的

💡 一直線には進まない

機械学習プロジェクトは、教科書のように順番に進むことはほとんどありません。

何度も前のステップに戻って改善する必要があります。

【反復的なプロセスの例】 モデル評価で精度が低い(目標:80%、実績:65%) ↓ どこに問題があるか分析 ↓ ・データが足りない? → STEP 2(データ収集)へ戻る ・前処理が不十分? → STEP 4(前処理)へ戻る ・特徴量が悪い? → STEP 4(特徴量エンジニアリング)へ戻る ・モデルが不適切? → STEP 5(モデル選択)へ戻る ↓ 改善して再度評価 ↓ (目標を達成するまで繰り返す)

❌ よくある失敗パターン

❌ 失敗1:問題定義が曖昧

「とりあえずAIで何かやりたい」では成功しません。
対策:具体的で測定可能な目標を設定する

❌ 失敗2:データの質を軽視

モデルばかりに注目して、データの確認をおろそかにする。
対策:EDAとデータ前処理に十分な時間をかける

❌ 失敗3:過学習に気づかない

訓練データでの精度だけを見て満足する。
対策:必ずテストデータで評価する。交差検証を使う

❌ 失敗4:デプロイを考えていない

Jupyter Notebookで動くだけで満足する。
対策:最初から「どう運用するか」を考える

📝 STEP 4 のまとめ

✅ このステップで学んだこと
  • 機械学習プロジェクトは9つのステップで進める
  • 問題定義が最も重要(何を解決したいのか明確に)
  • プロジェクトの80%はデータ準備(収集、EDA、前処理)
  • データの質がモデルの性能を決める(Garbage In, Garbage Out)
  • 機械学習プロジェクトは反復的(何度も前のステップに戻る)
  • デプロイ後も継続的な改善が必要(モニタリング、再学習)
💡 覚えておくべきこと

機械学習は「モデルを作ること」だけではありません。

問題定義 → データ準備 → モデル作成 → 運用という全体の流れを理解することが大切です。

🔜 次のステップへ

STEP 5では、「データの分割とホールドアウト法」について詳しく学びます。

なぜデータを訓練・テストに分けるのか、その重要性を理解しましょう。

📝 練習問題

問題1 ふつう

プロジェクトのステップ

あなたは新しい機械学習プロジェクトを始めます。以下のステップを正しい順序に並べてください。

A. モデルの訓練
B. データの可視化(EDA)
C. 問題定義
D. データ前処理
E. モデルの評価

正解:C → B → D → A → E

正しい順序とその理由:

1. C: 問題定義
まず「何を解決したいか」を明確にします。これがないと、どんなデータが必要か、どんなモデルを使うべきかが決まりません。

2. B: データの可視化(EDA)
集めたデータを可視化して、特徴やパターンを理解します。データの傾向、欠損値、異常値を確認します。

3. D: データ前処理
EDAで見つけた問題(欠損値、異常値など)を処理し、データを機械学習で使える形に整えます。

4. A: モデルの訓練
前処理が完了したデータでモデルを学習させます。

5. E: モデルの評価
訓練したモデルの性能をテストデータで測定します。

なぜこの順序が重要なのか:

  • 問題定義をせずにモデルを作ると、「作ったはいいけど何の役に立つの?」となる
  • EDAをせずに前処理すると、データの特徴を理解しないまま間違った処理をする可能性がある
  • 前処理をせずにモデルを訓練すると、欠損値でエラーが出たり、精度が低くなる
  • 評価は訓練の後でないとできない(モデルがないと評価できない)
問題2 むずかしい

実務でのトラブルシューティング

あなたはスパムメール判定のモデルを作りました。
訓練データでの正解率:99%
テストデータでの正解率:60%

この状況で、最も可能性が高い問題と対策を選んでください。

  • A. データ量が少ない → もっとデータを集める
  • B. 過学習が起きている → モデルを単純にする、正則化を強める
  • C. 前処理が不十分 → データクリーニングをやり直す
  • D. アルゴリズムが不適切 → 別のアルゴリズムを試す
正解:B

なぜBが正解なのか?

訓練データで99%、テストデータで60%という大きな差は、過学習(Overfitting)の典型的な症状です。

過学習とは何か:

  • モデルが訓練データを「丸暗記」してしまっている状態
  • 訓練データでは完璧に正解するが、新しいデータには対応できない
  • 「勉強した問題だけは解けるが、応用問題は解けない」ようなもの

過学習の対策:

  • モデルを単純にする(決定木の深さを浅くする、特徴量を減らす)
  • 正則化を強める(Ridge、Lassoのalphaを大きくする)
  • データを増やす(学習データを増やすと過学習しにくくなる)
  • 交差検証を使う(より安定した評価ができる)
  • ドロップアウトを使う(ニューラルネットワークの場合)

他の選択肢が間違いの理由:

A(データ量が少ない)が間違いの理由:
データ量が少ない場合、訓練データでも精度が低くなるはずです。今回は訓練データで99%の高精度が出ているので、データ量の問題ではありません。

C(前処理が不十分)が間違いの理由:
前処理の問題なら、訓練データでも精度が低くなるはずです。訓練データで99%出ているので、前処理の問題ではありません。

D(アルゴリズムが不適切)が間違いの理由:
アルゴリズムの問題なら、訓練データでも精度が低くなることが多いです。今回の「訓練99%、テスト60%」というパターンは、アルゴリズムの問題というより過学習の問題です。

見分けるポイント:

訓練精度とテスト精度の差に注目しましょう。

  • 訓練精度 >> テスト精度(大きな差) → 過学習
  • 訓練精度 ≒ テスト精度(両方低い) → データ、前処理、アルゴリズムの問題
📝

学習メモ

機械学習入門 - Step 4

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE