DataRobotアプリテンプレートを使って製造トラブルの判断理由を生成AIに説明させてみた

### 1. はじめに
こんにちは、DataRobotデータサイエンティストの濱上です。普段はDataRobotでデータサイエンティストとして製造業界、鉄道業界、不動産業界、ゲーム業界などのお客様のAI活用をご支援しています。技術的には安定的なモデル運用（LLMOps、MLOps）を担当しています。

以前のブログ記事では、DataRobotの「[予測コンテンツジェネレーター](https://docs.datarobot.com/ja/docs/workbench/wb-apps/app-templates/at-content-gen.html)」を用い、[顧客一人ひとりに最適化された提案を行うAIアプリケーション](https://qiita.com/DataRobot_PR/items/b0d445d845f2ce1927d2)や、[営業案件の確度予測とその根拠を提示するAIアプリケーション](https://qiita.com/DataRobot_PR/items/9531b4ed867692a3e885)など、営業・マーケティングシーンでの利用例をご紹介しました。

今回は製造現場での活用例として、「**製造トラブルの予兆検知とその判断理由の可視化**」というテーマに、予測AIと生成AI（LLM）を組み合わせた解決策を紹介します

製造現場では、機械の故障や製品の不良といったトラブルを未然に防ぐことが、生産効率と品質維持の観点から非常に重要です。予測AIを活用することで、これらのトラブルの発生確率を予測することが可能になってきました。DataRobotの予測AIは予測値だけでなく、「なぜAIがそう判断したのか？」という根拠の部分を「[予測の説明](https://docs.datarobot.com/ja/docs/modeling/analyze-models/understand/pred-explain/predex-overview.html)」として与えます。しかし、統計的な指標やチャートだけでは判断根拠の理解に時間がかかることがあり、現場のオペレーターが具体的なアクションに繋げにくい、という課題がありました。

本記事では、この課題に対し、**予測AIが出す判断根拠に、生成AIが自然文による解説を付け加える**ことで、現場のオペレーターが迅速かつ的確な意思決定を下せるようになるソリューションを、具体的な設定コードと共に解説します。

### 2. 製造現場における課題と「予測AIと生成AIの連携」による解決策
製造現場では、以下のような課題に日々直面しています。
- 突発的な設備故障や製品不良による生産ラインの停止リスク
- 不良品発生時の原因究明の難しさと時間的コスト
- 熟練オペレーターの経験や勘に頼った判断と、その属人化
- 膨大なセンサーデータや稼働ログの監視・分析の限界

これらの課題に対し、予測AIは、過去のデータからトラブル発生のパターンを学習し、将来のトラブル発生確率を予測します。しかし、予測結果だけでは「なぜこの製造条件が危険と判断されたのか？」「具体的にどのパラメータを調整すべきか？」といった、現場オペレーターがアクションを起こすための情報が不足していることがあります。
そこで大きな力を発揮するのが、予測AIと生成AIの連携です。製造トラブルを事前に検知する予測AIと、その判断理由を自然言語で分かりやすく解説する生成AIを組み合わせます。実際にこれらを連携することで得られたアウトプットがこちらです。


![output.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864834/8d6af933-5115-4eb8-890b-1372fd9395d8.gif)



このAIアプリケーション「製造トラブル予測オペレーター」は予測AIと生成AIを組み合わせることで、以下のメリットを実現します。

- **予測AIの判断根拠の平易化・明確化**： 生成AIが、予測AIが出力する「影響の大きな要因（[特徴量のインパクト](https://docs.datarobot.com/ja/docs/modeling/analyze-models/understand/feature-impact.html)）」や「予測の根拠（予測の説明）」といった専門的な情報を、現場のオペレーターにも理解しやすい自然な日本語で説明してくれます。

- **迅速な意思決定の強力な支援**： 単に予測結果を説明するに留まらず、その情報を基にオペレーターが**具体的にどの製造パラメータに注目し、どのようなアクションを起こせばリスクを効果的に低減できるのか**を、明確かつ確認しやすい形で提示します。オペレーターは、**推奨アクションや注意点を平易な言葉で受け取れる**ため、迅速に次の行動に移すことができます。例えば、「センサーAの数値が通常より高いため、トラブルの可能性があります。センサーAのキャリブレーションを確認してください」といった具体的な指示を得ることが可能です。

### 3. 「予測コンテンツジェネレーター」を起点とした「製造トラブル予測オペレーター」開発の概要

「製造トラブル予測オペレーター」は、DataRobot アプリテンプレートの一つである「予測コンテンツジェネレーター」を基に開発しました。このアプリテンプレートが持つ 「型」 に、データ・プロンプト・UI/UXのデザインを適用するだけで、オリジナルのAIアプリケーションを効率的に開発できます。実際に、「予測コンテンツジェネレーター」を用いたことにより、以下の開発ステップを自動化し、数時間で完成版を構築できました。

![hamagami.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864834/d9ff0583-8897-4f9e-bd79-c7eed61c2834.png)

**1. データアップロード**： 過去の製造実績データ（各センサーの値、作業パラメータ、トラブル発生の有無など）をDataRobotにアップロードします。

**2. 予測モデル作成**： DataRobotのモデル開発環境を利用し、「製造トラブル発生確率」を予測するモデルを構築します。この際、DataRobotは「どの特徴量が予測に寄与したか（特徴量のインパクト）」や「個々の予測に対する根拠（予測の説明）」も自動で算出します。

**3. アプリテンプレート設定**：
- 予測モデルと、生成AI（例：Azure OpenAI ServiceのGPTモデルなど）を連携させます。
- 生成AIに対して、「予測結果」「予測の説明」「説明のトーン（専門的、簡潔など）」「説明の長さ」といった情報をプロンプトとして設定します。

**4. アプリ実行と結果確認**：
- オペレーターが現在の製造条件（各センサーの値など）をアプリケーションに入力します。
- アプリケーションはDataRobotの予測モデルを呼び出し、トラブル発生確率を予測します。
- 次に、予測結果と予測の説明を基に、生成AIがオペレーター向けの分かりやすい説明文（「現在の状況ではトラブルの可能性がXX%です。特にセンサーYの値が通常範囲から外れており、これが主な要因と考えられます。センサーYの確認と調整を推奨します。」など）を生成し、アプリ画面に表示します。

これにより、オペレーターは単なる「危険／安全」といった予測結果だけでなく、「なぜ危険なのか」「何をすべきか」という具体的なアクションに繋がる情報を得ることができます。

### 4. アプリ設定コード解説（app_ds_settingsの変更）
DataRobot アプリテンプレートでは、アプリケーションのUIや生成AIへの指示をPythonのコードで詳細にカスタマイズできます。

「予測コンテンツジェネレーター」には、以下の[３つのサンプルノートブックがテンプレート](https://github.com/datarobot-community/predictive-content-generator/tree/main/notebooks)として用意されています。

- train_model_nbo.ipynb：レコメンドモデル（多値分類）
- train_model_fraud.ipynb：不正検知モデル（2値分類）
- train_model_underwriting.ipynb：ローン審査モデル（2値分類）

今回の製造トラブル予測は2値分類タスクであるため、train_model_underwriting.ipynbを使用しました。同様に2値分類に対応している train_model_fraud.ipynbを出発点とすることも可能です。起動するノートブックを変更するときは、/infra/settings_main.py にある36行目を、該当ipynbに変更します。詳細については、[以前の解説ブログ](https://qiita.com/DataRobot_PR/items/b0d445d845f2ce1927d2#43-%E4%BA%88%E6%B8%AC%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E6%A7%8B%E7%AF%89)を参照してください。

以下に、train_model_underwriting.ipynbで主に変更した箇所であるapp_ds_settingsの内容について解説します。

```python
app_ds_settings = AppDataScienceSettings(
    page_title="製品トラブル予測オペレーター",
    page_subtitle=textwrap.dedent("""\
        予測AIと生成AIを組み合わせ、製品トラブルを検知します。
        ドロップダウンから選択して送信するだけです！"""), # タイトルの下に表示される説明文
　　 #...（中略）...
    record_identifier={
        "column_name": "製造ID",
        "display_name": "製造ID",
    },
    default_number_of_explanations=3,
    target_probability_description="製造トラブルの発生可能性",
    email_prompt=textwrap.dedent("""\
製造現場のオペレーターが製造パラメータを調整するときに、指定したパラメータで製造トラブルのリスクがあるかどうか参考となる情報をもとめています。
AIモデルが予測した製造ID{selected_record}の製造トラブルの発生可能性は {prediction_label}であることを伝えてください。
この文章のトーンは {tone}にしてください。
長さは{verbosity}にしてください。
予測の根拠として、以下の要因を考慮に入れてください。:
{rsp}"""),
    outcome_details=[
        OutcomeDetail(
            prediction=0,
            label="製造トラブルの可能性が低い",
            description="製造トラブルの可能性は低いため製造ラインでの製造が許容される",
        ),
        OutcomeDetail(
            prediction=1,
            label="製造トラブルの可能性が高い",
            description="製造トラブルの可能性が高いためパラメータの設定検討が必要",
        ),
    ],
    #...（中略）...
    tones=[ # 生成される文章のトーンの選択肢
        "専門的",
        "情報に富んでいる",
        "フォーマル",
        "親しみやすい、カジュアル",
        "明るく、面白い",
        "ウィットに富み、遊び心がある",
    ],
    verbosity=["短い", "普通", "長い"],
    system_prompt=textwrap.dedent("""\
あなたは、製造オペレーターが製造パラメーターを設定する際に、参考情報を与えるスペシャルアドバイザーです。
あなたの仕事は、製造トラブルの発生確率をもとに、製造パラメータを変更すべきかどうか決定することです。
あなたは、製造トラブルの発生可能性に関する詳細な情報を持っています。
また、製造トラブルの発生可能性を決定する要因のリストも持っています。
あなたの役割は、製造トラブルの発生可能性の情報とその根拠を明確に提示し、パラメータ設定するオペレーターに参考情報を提供することです。
要因はリスト形式で視覚的に分かりやすく表示してください。
オペレーターは日本人なので、回答は日本語で生成してください。
        """),
    model_spec=LLMModelSpec(
        input_price_per_1k_tokens=0.001,
        output_price_per_1k_tokens=0.002,
    ),
)
```
この設定ファイルのポイントは以下の通りです。

- page_title, page_subtitle: これらはアプリケーションのUIに直接表示され、ユーザーが何のアプリか一目で理解できるようにします。
- record_identifier: 予測を行う対象（この場合は「製造ID」）を特定するためのキーとなります。
- target_probability_description: 生成AIへのプロンプト内で、予測モデルが出力する確率が「製造トラブルの発生可能性」であることを明確に伝えます。
- email_prompt: ここが**生成AIへの指示の核心部分**です。
　・ {selected_record}: ユーザーが選択した製造IDに置き換えられます。
　・ {prediction_label}: outcome_detailsで設定した予測結果のラベル　
 　　 （例：「製造トラブルの可能性が高い」）に置き換えられます。
　・ {tone}, {verbosity}: ユーザーがアプリ画面で選択した文章のトーンや詳細度に
 　　置き換えられます。
　・ {rsp}: DataRobotの予測モデルが出力した予測の説明（Prediction Explanations）が
 　　ここに挿入されます。これが、生成AIが「なぜそう予測したか」を解釈するための
   　　元情報となります。
- outcome_details: 予測モデルが出力する数値（例：0か1）に対して、人間が理解しやすいラベル（例：「製造トラブルの可能性が低い」「製造トラブルの可能性が高い」）と、その結果が具体的にどういう意味を持つのか（description）を定義します。
- tones, verbosity: ユーザーが生成される説明文の雰囲気を調整できるように、選択肢を提供します。これにより、現場のニーズに合わせたコミュニケーションが可能になります。
- system_prompt: 生成AIに対して、どのような役割（ペルソナ）で、どのような点に注意して応答を生成すべきかを指示します。ここでは「製造オペレーター向けのスペシャルアドバイザー」として、要因をリスト形式で分かりやすく、日本語で提示するよう指示しています。
- model_spec: 利用するLLMのコスト情報を設定しておくことで、API利用量の概算を把握するのに役立ちます（実際の課金はLLM提供サービス側で行われます）。

これらの設定を通じて、DataRobotの予測AIが出した数値的な予測結果と影響要因が、email_promptとsystem_promptの指示に基づき、製造オペレーターにとって具体的で理解しやすいアドバイスへと変換されるのです。

### 5. 活用例と展開
この「製造トラブル予測オペレーター」は、様々な形で活用できます。

#### 5.1. 個別条件でのリアルタイム予測と説明
現場のオペレーターが、これから設定しようとしている製造パラメータや、現在の機械の状態に関する値をアプリケーションに入力します。すると、リアルタイムでその条件下でのトラブル発生確率と、生成AIによる「なぜその確率なのか」「特に注意すべき項目は何か」「次に何をするべきなのか」といった情報が表示されます。これにより、オペレーターは潜在的なリスクを事前に把握し、問題が発生する前に迅速に対策を講じることが可能になります。

#### 5.2. バッチ予測による複数シナリオのリスク評価
「予測コンテンツジェネレーター」にはバッチ予測のための画面も搭載されており、複数の対象に対して連続して生成させる活用も可能です。

例えば、考えられる複数の製造条件の組み合わせ（パラメータのパターン）をCSVファイルなどにまとめて準備し、一括でアップロードします。そして、構築した予測モデルを用いて、これらの全パターンに対するトラブル発生確率を一括で予測（バッチ予測）します。

その結果、**リスクが高いと判定された製造条件の組み合わせをピックアップ**し、その組み合わせに限定して生成AIによる説明を付与することで、**生成AIの利用コストを最適化**しつつ、「なぜその製造条件の組み合わせが危険なのか、どうするべきなのか」を把握できます。

#### 5.3. 現場への展開方法
作成したアプリケーションは、以下のような形で現場に展開できます。

- **Webアプリケーションとして共有**： DataRobot上で作成したアプリのURLを共有し、オペレーターがブラウザ経由で直接利用します。
- **API連携**： 予測機能や説明生成機能をAPIとして公開し、既存の生産管理システム、監視システム、またはBIツールなどと連携できます。これにより、普段使っているシステム内でシームレスにAIの洞察を活用できます。
- **アラート通知**： 予測されたトラブル発生確率が一定の閾値を超えた場合や、特に注意すべき要因が検出された場合に、関係者に自動でメールやチャット通知を送るような仕組みを構築することも可能です。

### 6. 「予測コンテンツジェネレーター」のさらなる可能性
今回ご紹介した製造業のトラブル予測以外にも、「予測コンテンツジェネレーター」は、様々な業界・業務に応用できます。

例えば、

- **製薬企業のMR活動支援**：
　・医師ごとの処方ポテンシャルを予測。
　・なぜそのポテンシャルと予測されたのか（影響した医師の属性、過去の活動履歴
　　など）を生成AIがMR向けに解説。
　・訪問先の優先順位付けや、医師への適切な情報提供内容の提案を支援するアプリを
 　　作成。
- **小売業における顧客離反予測とその理由説明**：
　・離反の可能性が高い顧客を予測。
　・なぜその顧客が離反しそうなのか（購買頻度の低下、特定商品の購入停止、
 　　クレーム履歴など）を、マーケティング担当者や営業担当者向けに生成AIが
   　　解説し、具体的な引き止め施策の立案を支援。
- **金融機関における不正取引検知の説明**：
　・不正取引の疑いがあるトランザクションを予測モデルが検知。
　・なぜその取引が不正と判断されたのか（取引パターン、金額、地域など）を、
 　　調査担当者向けに生成AIが分かりやすく説明。

このように、**予測AIが出した「What（何が起こるか）」と「Why（なぜそうなるか）」を、生成AIが「So What（だから何なのか）」「Now What（次に何をすべきか）」に繋げる**ことで、AIの価値を最大限に引き出し、現場の業務改善や意思決定を強力にサポートします。

### 7. まとめ
本記事では、DataRobotのアプリテンプレートの１つである「予測コンテンツジェネレーター」を用い、予測AIと生成AIを連携させ、製造現場におけるトラブル予測とその判断理由を分かりやすくオペレーターに提示するソリューションをご紹介しました。

このアプローチの主な利点は以下の通りです。

- **予測AIの判断根拠の透明化**： 生成AIが、専門的な予測の根拠を、現場ユーザーが理解しやすい言葉で翻訳・解説します。
- **迅速な意思決定の支援**： 具体的なアクションに繋がる情報提供により、オペレーターは迅速かつ的確な判断を下せるようになります。
- **高度なAIアプリケーション開発の効率化**： アプリテンプレートを利用することで、データを差し替えるだけで高度なAIアプリケーションを迅速に構築・展開できます。
- **多様な業務への応用可能性**： 製造業に限らず、様々な業界・業務の課題解決に応用できます。

DataRobotは、予測AIモデルの自動構築から、その結果を現場で活用するためのアプリケーション構築、さらには生成AIとの連携までを、単一のプラットフォーム上でシームレスに実現します。

今回の記事が、皆様のAI活用の一助となれば幸いです。ぜひ、DataRobotのアプリテンプレートを使って、あなたのビジネス課題を解決するAIアプリケーションを作成してみてください。