DataRobotと生成AIで実現する！次世代予測コンテンツジェネレーター

### 1. はじめに
シニアデータサイエンティストの菅原崇です。金融業界のお客様向けに、与信モデル構築、生成AIアプリ構築プロジェクトやAI人材育成等を担当しています。

近年、AI技術の進化は目覚ましく、従来の予測AI（過去のデータに基づき、将来を予測するAI）だけでなく、生成AIも組み合わせることで、さらなる高付加価値化が注目されています。予測結果に基づいた個別のコンテンツ（メールや社内レポート等）を自動生成する方法として、DataRobotのアプリテンプレートの一つ「予測コンテンツジェネレーター」をご紹介します。本テンプレートを活用することで、予測AIと生成AIを組み合わせ、顧客一人ひとりに最適化されたコンテンツをアプリ上で自動生成するだけでなく、運用(Ops)環境及びその監視項目も同時に立ち上げることができます。

本テンプレートには、B2Cビジネスの3つユースケース（ターゲティング、不正検知、ローン審査）が組み込まれています。もちろん、他のB2CビジネスのユースケースやB2Bにも応用可能であり、個別コンテンツを生成する業務全般に有用です。本稿では、紙面の都合で、B2Cのターゲティングのユースケースを中心に説明します。

本テンプレートの主な対象者は、2タイプ挙げられます。技術者（エンジニアやデータサイエンティスト）で高付加価値のAIアプリを高速に開発したい方。そして、DX推進担当者で、パーソナライズされたコンテンツの提供や、レポーティング業務の効率化に関心がある方です。

### 2. 背景：パーソナライズの重要性と効率化の両立
現代の消費者は、大量の情報に囲まれており、画一的で不要なメッセージでは埋もれてしまいます。そのため、顧客の興味やニーズに合わせたパーソナライズされたコンテンツを提供することで、コンバージョン率を高めることが求められています。
しかし、これを1件1件手作業で行うには、膨大な時間と労力がかかり、現実的ではありません。そこで、AIの力を活用することで、効率的かつ高度なパーソナライズを実現します。

### 3. 予測コンテンツジェネレーターとは
予測コンテンツジェネレーターは、分類モデルからの[予測の説明](https://docs.datarobot.com/ja/docs/modeling/analyze-models/understand/pred-explain/predex-overview.html)（各ユーザの予測値の理由を説明する機能）を使用して、予測コンテンツを生成します。

これにより、例えば、
- 顧客の属性や購買履歴やニーズに基づいた商品レコメンドメール
- ローン審査時に、否決された顧客への説明メールや社内報告レポートの生成
- クレジットカードやC2C取引等の不正利用について、アラートメール生成

といった様々なコンテンツを自動生成することが可能になります。

### 4. 予測コンテンツジェネレーターについて
#### 4.1. 全体像
本テンプレートでは、顧客の購買行動を予測し、その予測結果を生成AIに連携することで、パーソナライズされたコンテンツを生成します。
アーキテクチャは、次のようになります。多くの要素技術から成り立っていることがわかります。

![sugawara1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864834/dc157b57-3e06-444d-9a94-fd981ea98c58.png)

Streamlitアプリの上部では、対象者の選定、予測AIの結果、プロンプトの仕様、生成されたメール等が確認できます。

![sugawara2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864834/05e1b09e-660e-4b76-8904-e76948b633df.png)

このアプリの下部では、生成されたメールへのユーザフィードバックや様々な評価指標が確認できます。

![sugawara3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864834/6e70c0f7-8ce2-4a55-9c63-104115033f2b.png)

これらの生成AIに関する運用時のKPIsは、MLOpsと同様にモニタリングすることも可能です。下記はその一部です。

![sugawara4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864834/1bd210e3-3bfe-496b-b1f5-9099dcfde994.png)

#### 4.2. 環境変数の設定とクイックスタート
まず、.env.templateを.envに書き換えます。
次に、DataRobotのCodespace環境で、OpenAIを使う例として、下記の環境変数を入力します。
Pulumiの設定ファイルを暗号化するための必須パスフレーズ(pulumi)を入力し、構築するアプリケーションの言語は日本語（ja_JP）にしています。

```json
OPENAI_API_KEY=
OPENAI_API_BASE=
OPENAI_API_VERSION=
OPENAI_API_DEPLOYMENT_ID=

# Required, unless logged in to pulumi cloud. Choose your own alphanumeric passphrase to be used for encrypting pulumi config
PULUMI_CONFIG_PASSPHRASE="pulumi"
MAIN_APP_LOCALE=ja_JP
```

次に、下記のコマンドをターミナル等で実行することで、おおよそ10分でStreamlitアプリが立ち上がります。

```json
python quickstart.py YOUR_PROJECT_NAME
```

#### 4.3. 予測モデルの構築
デフォルトでは、ターゲティングのユースケースとして、[train_model_nbo.ipynb](https://github.com/datarobot-community/predictive-content-generator/blob/main/notebooks/train_model_nbo.ipynb)が使われ、携帯電話の多値分類問題を解いています。このノートブックは、ユースケース固有のパラメータのため、ここを要件に合わせてカスタマイズしていきます。

大まかに、次のステップがあります。
- 学習データ（[nbo_training.csv](https://github.com/datarobot-community/predictive-content-generator/blob/main/assets/nbo_training.csv)）を読み込み、AutoMLで最適なモデルを構築
- 予測対象は「Offers」（顧客に提示するオファー）、評価指標は「LogLoss」
- 生成AIに連携するための設定（顧客ID、予測確率、説明変数など）を定義

ユースケースを変更する場合は、[/infra/settings_main.py](https://github.com/datarobot-community/predictive-content-generator/blob/main/infra/settings_main.py) にある下記36行目を、notebooks/にある該当ipynbに変更します。

デフォルトのターゲティングは、下記のようになっています。

```json
model_training_nb = PROJECT_ROOT / "notebooks" / "train_model_nbo.ipynb"
```

不正検知の場合は、下記のようにtrain_model_fraud.ipynbに変更します。
```json
model_training_nb = PROJECT_ROOT / "notebooks" / "train_model_fraud.ipynb"
```

ローン審査の場合は、下記のようにtrain_model_underwriting.ipynbに変更します。
```json
model_training_nb = PROJECT_ROOT / "notebooks" / "train_model_underwriting.ipynb"
```
#### 4.4. 生成AIとの連携
このユースケースにおける予測モデルの結果を、Azure OpenAIなどの生成AIサービスに連携します。

- 予測されたオファー内容、顧客情報、行動履歴などをプロンプトとして生成AIに渡す
- 生成AIは、プロンプトに基づいて、最適なメッセージを生成

#### 4.5. フロントエンド
frontend/app.py を編集します。Streamltのトップ画面に関するソースコードです。データの取得、メールの表示、予測AIの実行、メール生成、フィードバックの収集、バッチ処理と結果のダウンロードといった機能が記載されています。

### 5. まとめ
本記事では、予測AIと生成AIを組み合わせた「予測コンテンツジェネレーター」というテンプレートをご紹介しました。このテンプレートは応用の幅が広く、紹介したユースケース以外にも活用することが可能です。

学習データを社内データに差し替え（assetsに保存）、ノートブックのプロンプトを書き換えること等によって、比較的短期間で、社内用のデモアプリが開発できます。このテンプレートを使いこなすことでで、さらなるAI活用が期待できますので、ぜひご活用ください。