概要とビジネスシーン
Einstein Discovery は、Salesforce が提供するノーコード/ローコードの予測分析および処方的洞察プラットフォームであり、データから自動的にパターン、トレンド、洞察を発見し、ビジネス成果を予測・最適化する能力を組織にもたらします。データエンジニアにとって、これは生データをビジネス価値の高い予測モデルへと迅速に変換し、デプロイするための強力なツールとなります。
実際のビジネスシーン
シーンA - 金融業界:ある地方銀行では、顧客の信用リスク評価を手動プロセスと過去の経験に基づいて行っており、新規融資の審査に時間がかかり、貸倒率が高いという課題を抱えていました。
- ビジネス課題:信用リスク評価の非効率性、高止まりする貸倒率。
- ソリューション:Einstein Discovery を使用し、顧客の属性、過去の取引履歴、信用情報などのデータセットを作成。目標変数(貸倒の有無)を設定してストーリーを作成し、信用リスク予測モデルを構築しました。このモデルをSalesforceの融資申請フローに組み込み、リアルタイムでリスクスコアを表示するようにしました。
- 定量的効果:融資審査時間が30%短縮され、貸倒率が5%削減されました。
シーンB - 小売業界:大手オンラインストアでは、特定のキャンペーン後の一部の顧客が高い頻度で離反するという問題に直面していました。離反の兆候を早期に捉え、適切な対策を講じることが急務でした。
- ビジネス課題:顧客離反の原因特定と早期対策の不足、顧客維持率の低迷。
- ソリューション:Einstein Discovery を活用し、顧客の購買履歴、Webサイトでの行動、カスタマーサポート履歴などのデータから顧客離反予測モデルを構築。離反リスクの高い顧客を特定し、パーソナライズされた特別オファーやプロアクティブなサポートを自動的に提供するフローを実装しました。
- 定量的効果:顧客維持率が7%向上し、マーケティングキャンペーンのROIが改善されました。
技術原理とアーキテクチャ
Einstein Discovery は、機械学習(Machine Learning)アルゴリズムをバックエンドで利用し、ビジネスユーザーが複雑なデータサイエンスの知識なしに予測モデルを構築できるよう設計されています。その基礎的な動作メカニズムは以下のステップで構成されます:
- データ準備 (Data Preparation):Salesforce オブジェクトや外部データソースからデータを抽出し、CRM Analytics(旧 Tableau CRM)のデータフロー (Dataflows) またはレシピ (Recipes) を用いてデータセット (Dataset) を作成します。このフェーズでデータの結合、変換、クリーニングが行われます。
- ストーリー作成 (Story Creation):作成されたデータセットから、予測したい目標変数 (Goal Variable) を指定し、「ストーリー」を生成します。Einstein Discovery は自動的に探索的データ分析 (Exploratory Data Analysis)、特徴量エンジニアリング (Feature Engineering)、モデル学習 (Model Training) を実行し、「何が起こったか (What Happened)」、「なぜそれが起こったか (Why it Happened)」、「何が起こるか (What Will Happen)」、「何をすべきか (What to Do)」といった洞察と予測モデルを生成します。
- モデルデプロイ (Model Deployment):学習済みのモデルは、Salesforce フロー (Flow)、Apex、または Prediction API を通じて Salesforce 環境にデプロイされ、リアルタイムでの予測や処方的推奨事項の提供に利用できるようになります。
主要コンポーネントと依存関係は以下の通りです:
- CRM Analytics Platform (旧 Tableau CRM):Einstein Discovery の基盤となるデータストレージおよび処理エンジンを提供します。
- Data Manager (データマネージャー):データフローやレシピを管理し、データセットを作成します。
- Dataset (データセット):分析と予測に使用される整形されたデータです。
- Story (ストーリー):予測目標とそれに関連する洞察およびモデル構築の結果をカプセル化したものです。
- Prediction Service (予測サービス):デプロイされたモデルに対してリアルタイム予測リクエストを処理します。
データフローは以下のように可視化できます:
| ステップ | コンポーネント | 説明 |
|---|---|---|
| 1. データソース | Salesforce Objects, External Data | Salesforce内のデータまたは外部データベース/CSVなど |
| 2. データ準備 | CRM Analytics Dataflows/Recipes | データの抽出、変換、ロード (ETL) |
| 3. データセット | CRM Analytics Dataset | 分析用に最適化されたデータ構造 |
| 4. モデル構築 | Einstein Discovery Story | 目標変数の指定、自動MLモデル生成、洞察の提供 |
| 5. モデルデプロイ | Einstein Discovery Model | Salesforce組織内での予測サービスとしての利用準備 |
| 6. 予測利用 | Flow, Apex, Prediction API | アプリケーション内でのリアルタイム予測、処方的推奨 |
ソリューション比較と選定
予測分析を実現するためのSalesforceエコシステム内および外部の選択肢はいくつかありますが、Einstein Discoveryはその中でも特定のニーズに特化しています。
| ソリューション | 適用シーン | パフォーマンス | Governor Limits | 複雑度 |
|---|---|---|---|---|
| einstein discovery | Salesforceデータや外部データを用いた予測分析、ビジネスユーザー向けAI、迅速な洞察、処方的提案 | 大規模データセットに最適化、迅速なモデル構築とデプロイ | APIコール数(25万/日)、データセット行数(1億)、変数数(50)など。 | コード不要でGUI中心、データ準備の知識は必要だがMLモデル構築の専門知識は不要 |
| ApexによるカスタムML | Salesforceプラットフォーム上で完全に制御されたシンプルな予測モデル、独自のビジネスロジック統合 | 大規模データや複雑なモデルには不向き、学習に時間がかかる可能性 | Apexのヒープサイズ、CPU時間、クエリ制限などに厳しく制約される | 高(ML知識、Apex開発力、数理的知識が必要) |
| 外部MLプラットフォーム (AWS Sagemaker/Azure ML) | 非常に複雑なモデル、大規模な非Salesforceデータ、高度なMLエンジニアリングチームがいる場合、多様なアルゴリズム選択 | 高度なスケーラビリティ、多様なアルゴリズムをサポート | Salesforceとの連携時 (API Callouts) にAPIコール制限 | 高(Salesforceとの連携の複雑性、ML専門知識、インフラ管理が必要) |
einstein discovery を使用すべき場合:
- ✅ Salesforceエコシステム内での予測分析を迅速に開始したい場合。
- ✅ ビジネスユーザーが直接、AIによる洞察と推奨事項を活用できるようにしたい場合。
- ✅ データ準備からモデル構築、デプロイ、予測までのプロセスを自動化・簡素化したい場合。
- ✅ 予測だけでなく、「なぜそうなったか」「どうすべきか」といった処方的洞察も必要とする場合。
- ✅ データエンジニアリングチームのリソースを最適化し、より戦略的なデータ活用に集中させたい場合。
❌ 不適用シーン:
- 非常にニッチで、Einstein Discovery がサポートしないカスタム性の高いMLアルゴリズムが絶対に必要な場合。
- Salesforce との連携が限定的な、完全にオフラインでクローズドなデータのみを扱う場合。
- 極めて大規模でリアルタイム性の要求が厳しく、超低レイテンシが不可欠な予測モデルを独自に構築する必要がある場合(その場合でも、Discoveryの予測結果を組み込むことは可能です)。
実装例
Einstein Discovery のモデルは主に GUI を通じて構築されますが、デプロイされたモデルは Apex から ConnectAPI を使用してプログラム的に呼び出すことができます。以下は、Apex で Einstein Discovery の予測サービスを呼び出す例です。この例では、架空の「信用リスク」予測モデルがデプロイされていることを想定しています。
public class EinsteinDiscoveryPredictionService {
/**
* @description Einstein Discovery 予測サービスを呼び出し、信用リスク予測を取得します。
* @param accountId 予測対象の Account ID
* @return ConnectApi.SmartDataDiscovery.PredictionOutput 予測結果オブジェクト
*/
public static ConnectApi.SmartDataDiscovery.PredictionOutput getCreditRiskPrediction(String accountId) {
// 予測定義IDは、Einstein Discovery でモデルをデプロイした際に生成される一意のIDです。
// Salesforce環境に合わせてこのIDを置き換える必要があります。
// Einstein Discovery の予測設定ページ (Prediction Builder) で確認できます。
String predictionDefinitionId = '0KDDm000000X01eGAC'; // ⚠️ これは架空のIDです。実際のIDに置き換えてください。
// 予測に必要な入力データを準備します。
// この Map のキーは、Einstein Discovery モデルの入力変数名と完全に一致する必要があります。
Map<String, Object> input = new Map<String, Object>();
// 例えば、Account オブジェクトから関連データを取得
Account acc = [SELECT Id, Industry, AnnualRevenue, NumberOfEmployees, Type
FROM Account
WHERE Id = :accountId LIMIT 1];
if (acc != null) {
// モデルが期待する入力変数に応じてデータを Map に追加します。
// 変数名 (キー) は Einstein Discovery モデルで定義されたものと一致させる必要があります。
input.put('Industry', acc.Industry); // 業界情報
input.put('AnnualRevenue', acc.AnnualRevenue); // 年間収益
input.put('NumberOfEmployees', acc.NumberOfEmployees); // 従業員数
input.put('AccountType', acc.Type); // アカウントタイプ
// 他にも予測モデルが必要とする入力変数があればここに追加します。
} else {
System.debug('Account not found for ID: ' + accountId);
// 適切なエラー処理または例外をスロー
return null;
}
try {
// ConnectApi.SmartDataDiscovery.Predictions クラスを使用して、Einstein Discovery 予測サービスを呼び出します。
// getPrediction メソッドは、予測定義IDと入力データ Map を引数に取ります。
ConnectApi.SmartDataDiscovery.PredictionOutput predictionOutput =
ConnectApi.SmartDataDiscovery.Predictions.getPrediction(predictionDefinitionId, input);
System.debug('Einstein Discovery Prediction Output: ' + predictionOutput);
return predictionOutput;
} catch (ConnectApi.SmartDataDiscovery.PredictionException e) {
// 予測サービス呼び出し中に発生した ConnectApi 固有の例外をキャッチします。
System.debug('Error calling Einstein Discovery Prediction Service: ' + e.getMessage());
// ビジネス要件に応じたエラー処理(例:カスタムログ記録、ユーザーへの通知)
throw new AuraHandledException('Einstein Discovery予測中にエラーが発生しました: ' + e.getMessage());
} catch (Exception e) {
// その他の予期せぬ例外をキャッチ
System.debug('An unexpected error occurred: ' + e.getMessage());
throw new AuraHandledException('予期せぬエラーが発生しました: ' + e.getMessage());
}
}
/**
* @description 予測結果から特定の目標変数のスコアを取得します。
* @param predictionOutput Einstein Discovery から返された予測結果
* @param goalVariable 取得したい目標変数名 (例: 'Credit_Risk_Score')
* @return Decimal 目標変数のスコア、または null
*/
public static Decimal getScoreFromPrediction(ConnectApi.SmartDataDiscovery.PredictionOutput predictionOutput, String goalVariable) {
if (predictionOutput != null && predictionOutput.prediction != null) {
for (ConnectApi.SmartDataDiscovery.Prediction prediction : predictionOutput.prediction) {
// prediction オブジェクトが目標変数を含んでいるか確認
if (prediction.goalVariable != null && prediction.goalVariable.equals(goalVariable)) {
// スコアが数値の場合、それを Decimal 型に変換して返す
if (prediction.score != null) {
return Decimal.valueOf(prediction.score);
}
}
}
}
return null; // 指定された目標変数のスコアが見つからない場合
}
}
実装ロジック解析:
predictionDefinitionIdにデプロイされた Einstein Discovery モデルの ID を設定します。これは Salesforce の予測ビルダーで確認できます。inputマップを作成し、予測モデルが期待する入力変数名(キー)と対応するデータ(値)を設定します。この例では Account オブジェクトのフィールドを使用していますが、外部データも結合して使用できます。ConnectApi.SmartDataDiscovery.Predictions.getPrediction()メソッドを呼び出し、predictionDefinitionIdとinputマップを渡します。- メソッドは
ConnectApi.SmartDataDiscovery.PredictionOutputオブジェクトを返します。このオブジェクトには予測スコア、改善提案、トップドライバーなどの情報が含まれます。 getScoreFromPredictionヘルパーメソッドは、返されたPredictionOutputから特定の目標変数に紐づく予測スコアを抽出し、Decimal型で返します。- エラーハンドリングとして
ConnectApi.SmartDataDiscovery.PredictionExceptionをキャッチし、予測サービス呼び出しにおける問題を処理します。
注意事項とベストプラクティス
権限要件
Einstein Discovery を利用するには、以下の権限セットまたはライセンスが必要です。
- CRM Analytics Plus ライセンス:これには Einstein Discovery 機能が含まれます。
- Einstein Discovery User Permission Set:ユーザーがストーリーを閲覧し、予測結果を利用するために必要です。
- Einstein Discovery Admin Permission Set:管理者やデータエンジニアがストーリーの作成、モデルのデプロイ、管理を行うために必要です。
- Connect API Access:Apex から予測サービスを呼び出す場合、プロファイルまたは権限セットで Connect API の有効化が必要です。
Governor Limits
Einstein Discovery は大規模なデータ処理に最適化されていますが、Salesforce プラットフォームの一般的なガバナー制限および Einstein Discovery 固有の制限に注意が必要です(2025年時点のデータに基づく)。
- Einstein Discovery Prediction API Calls:標準ライセンスの場合、1日あたり最大 250,000回 の予測呼び出し。アドオンライセンスでは 1,000,000回 に増加します。
- CRM Analytics Dataset Rows:1つのデータセットあたり最大 1億行。
- Variables in a Story:1つのストーリーで利用できる変数(フィールド)は最大 50個。
- Training Records for a Story:モデルトレーニングに使用できるレコードは最大 2,000万行。
- Apex Callouts:Apex から Connect API を呼び出す場合、一般的なコールアウト制限(例: トランザクションあたり100回のコールアウト、総タイムアウト120秒)も考慮する必要があります。
エラー処理
- ConnectApi.SmartDataDiscovery.PredictionException:予測サービス呼び出しでエラーが発生した場合にスローされます。この例外をキャッチし、原因(例: 不正な予測定義ID、入力データ形式の不一致)をログに記録し、適切なフォールバックロジックを提供します。
- 入力データの検証:予測サービスに渡す前に、入力データがモデルの期待する形式と範囲に合致しているか検証します。不足している、または無効なデータは予測結果に悪影響を与える可能性があります。
- タイムアウト処理:ネットワークの問題やサービス側の遅延に備え、Apex コールアウトのタイムアウトを設定することを検討してください。
パフォーマンス最適化
- データセットの最適化:CRM Analytics のデータフロー/レシピで、分析に不要なカラムを削除し、適切なデータ型を設定することで、データセットのサイズを最小限に抑えます。これにより、モデルトレーニング時間を短縮し、パフォーマンスを向上させます。
- モデルの定期的な再トレーニングと監視:ビジネス環境やデータの特性は変化するため、モデルの精度を維持するために定期的に再トレーニングを行い、予測パフォーマンスを監視します。データのドリフトを早期に検知することが重要です。
- 非同期処理での予測呼び出し:大量のレコードに対して予測をバッチ処理する場合、Batch Apex や Queueable Apex を使用して非同期で予測サービスを呼び出すことで、同期処理のガバナー制限を回避し、システムの応答性を維持します。
- 入力データのキャッシュ:繰り返し同じ入力データで予測を呼び出す必要がある場合、結果をキャッシュしてAPIコールの回数を削減することを検討します。
よくある質問 FAQ
Q1:Einstein Discovery はどのようなデータソースを利用できますか?
A1:Einstein Discovery は、Salesforce オブジェクトのデータ、外部データベース(各種コネクタ経由)、CSVファイルなど、CRM Analytics のデータフローやレシピを介してアクセス可能なあらゆるデータを活用できます。これにより、Salesforce 内外の統合的な予測分析が可能です。
Q2:Einstein Discovery のモデルの精度はどのように確認できますか?
A2:ストーリーサマリーには、モデルの評価指標(分類モデルの場合は AUC や精度、回帰モデルの場合は R-squared や RMSE など)が表示されます。また、予測パフォーマンスレポートでは、モデルが本番環境で実際にどれだけ正確に予測しているかを監視し、ドリフトを特定できます。
Q3:リアルタイムでの予測は可能ですか?
A3:はい、可能です。デプロイされた Einstein Discovery モデルは、Salesforce フロー、Apex、または Connect API を介してリアルタイムで呼び出すことができます。これにより、商談のスコアリング、顧客の次の最優良アクション提案、サービスリクエストの優先順位付けなど、ビジネスプロセスにリアルタイム予測を組み込むことができます。
まとめと参考資料
Einstein Discovery は、データエンジニアが直面するデータから価値を引き出すという課題に対する強力なソリューションを提供します。複雑な機械学習の知識がなくても、直感的なインターフェースを通じて予測モデルを構築し、ビジネスプロセスに組み込むことで、組織全体の意思決定を強化し、実用的な洞察を提供します。データ準備からデプロイ、監視に至るまで、そのライフサイクル全体をSalesforceプラットフォーム上で管理できるため、効率的でスケーラブルなデータ活用が実現します。
公式リソース:
- 📖 公式ドキュメント:Einstein Discovery Developer Guide - https://developer.salesforce.com/docs/atlas.en-us.sdd_dev.meta/sdd_dev/sdd_dev_overview.htm
- 📖 公式ドキュメント:ConnectApi.SmartDataDiscovery (Apex Reference) - https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_connectapi_einsteindiscovery.htm
- 📖 公式ドキュメント:Einstein Discovery Limits - https://help.salesforce.com/s/articleView?id=sf.crms_discovery_limits.htm&type=5
- 🎓 Trailhead モジュール:Einstein Discovery Basics - https://trailhead.salesforce.com/content/learn/modules/einstein-discovery-basics
コメント
コメントを投稿