アシストの製品サービスの紹介や課題解決、イベント・セミナー情報をお届けします。

No.32 ルールベースAI Corticonから機械学習 DataRobotの予測モデルを実行し、ディシジョンインテリジェンスを実現してみた。(2022年9月2日)

はじめに

本記事では、ルールベースAI「Corticon」(※1)のルールから、機械学習AI「DataRobot」(※2)の予測モデルを実行する方法を検証してみました。

※1 ルールベースAI「Corticon」とは
※2 機械学習AI「DataRobot」とは

検証する理由

ルールベースと機械学習はどちらもAIを実現するための技術であり、どちらか片方のみを利用してもAIシステムは構築できます。
しかし、ルールベースと機械学習を組み合わせ、お互いの得意部分を活かしつつ苦手な部分を補うことで、より柔軟で高精度な意思決定支援システムを構築できる場合があります。この裏付けとして、世界中のデータアナリスト・データサイエンティストが集まるKaggleの最近のコンペティションでも、ルールベースと機械学習をうまく組み合わせたディシジョンインテリジェンスがトップの成績をとった事例があります。

メリット

デメリット

機械学習

学習データがあればルールはわからなくても実装可能。
かつては処理が難しかった自然言語や画像の判別も実装が可能。

学習データがなければモデルは実装できない。
モデル内でどのようなルールでデータが処理されているか把握し難く、人間がそれを修正することも難しい。

ルールベース

学習データがなくてもルールがわかっていれば実装可能。
明示的な既知のルールを実装するため人間にも内容がわかりやすく変更もしやすい。

暗黙的な未知のルールは実装できない。
特徴量の個数が極端に多いデータや特徴量の意味合いが人間には把握できないデータ(自然言語・画像などが代表的)のルールは実装できない。

例:ローン申込み審査の処理の場合。

1.ルールベースで審査基準を満たしていない申込データを除外する。

2.(1)で除外されなかった申込データに対して、機械学習で貸し倒れ確率を算出する。

3.(2)の貸し倒れ確率を踏まえたうえで、ルールベースで最終的な諾否判定や金利計算を行う。

このような組み合わせのイメージです。

他のルールベースと機械学習を組み合わせ例として、機械学習の予測モデル作成時に必要なデータの加工や絞り込み部分をルールベースで補ったり、ルールベースでは実現困難な画像処理や自然言語処理部分を機械学習で補うなど、様々な利用方法が考えられます。

機械学習「DataRobot」の予測モデルの呼び出し方

DataRobotには機械学習による予測モデルの実行方法が複数用意されています。本記事ではDataRobot内で既に予測モデルが作成されてデプロイされていること(※)を前提に、Corticonなどの他システムとの連携に便利なREST API (v1.0)で予測モデルを実行してみます。

※ DataRobotでの予測モデルの作成方法やデプロイ方法に関しましては、本記事では割愛させていただきます。

上記のDataRobotデプロイ画面の予測タブからもAPIの実行方法を確認することができますが、予測実行APIにアクセスするための仕様をまとめると以下になります。

アクセス先のURL

https://[DR_URL]/predApi/v1.0/deployments/[MODEL_ID]/predictions
[DR_URL]と[MODEL_ID]に関してはDataRobotのサイトで確認することが可能です。


HTTPヘッダに追加するパラメーター

Authorization: Bearer [DR認証コード]
DataRobot-Key: [DR認証キー]
Content-Type: application/json; charset=UTF-8

[DR認証コード]と[DR認証キー]に関してはDataRobotのサイトで確認することが可能です。

リクエストJSON

リクエストでPOSTするJSONは以下のような構造です。文字コードはUTF-8です。

 [
  {"特徴量A": "値1", "特徴量B": "値2", ・・・・},
  {"特徴量A": "値3", "特徴量B": "値4", ・・・・},
  { 次の予測させたいデータ行 ・・・・}, ・・・・
]

レスポンスJSON

レスポンスデータに含まれるJSONは以下のような構造です。

 {"data": [
{
  "rowId": 行番号,
  "prediction": 予測結果,
  "predictionValues": [
    {"label":"予測ターゲット名","value":予測結果}
  ],
  "deploymentApprovalStatus": "APPROVED"
},
{ 次の予測結果行 ・・・・ }, ・・・・
]}

注意点

もし画像データをPOSTする必要がある場合は画像バイナリデータをBase64エンコードで文字列化してJSONにします。例えば以下のような形式です。

 "画像データ特徴量": "/9j/4AAQSkZJRg---中略---oooA//2Q==", 

また、レスポンスJSONの内容はDataRobot側のデプロイ設定や予測モデルの種類によって変化します。上記のレスポンス例は連続値を予測する回帰モデルのデフォルト設定時のJSONです。

Windowsでのcurlコマンド例

Corticonや他のシステムとDataRobotの連携を試す際は、まず事前にOSに付属しているcurlやwgetコマンドなどで上記設定のリクエストを実行し、DataRobotで正しく予測が実行できるかどうか確認します。Windowsのコマンドプロンプトの場合、以下のコマンドで確認できます。

curl "https://[DR_URL]/predApi/v1.0/deployments/[MODEL_ID]/predictions" -H "Content-Type: application/json; charset=UTF-8" -H "Authorization: Bearer DR認証コード文字列" -H "DataRobot-Key: DR認証キー文字列" -X POST -d @C:\リクエスト保存先パス\Request.json -o C:\レスポンス保存先パス\Response.json

ルールベース「Corticon」側の実装と動作確認

Corticonの標準機能だけではルール内部データをリクエストJSONに変換して上記のHTTP仕様でPOSTしたり、DataRobotから返ってきたレスポンスJSONをルール内部データとして取り込むことはできません。
このような場合は、Corticonではルール内で任意のJavaプログラムを実行できる拡張機能を利用します。
本記事ではサンプルとして、Corticonの拡張機能の一種であるサービスコールアウトを実装しました。JavaのプログラムのソースとビルドしたJARファイル(※)は以下です。

※ Javaソースの内容やビルド方法に関しましては、本記事では割愛させていただきます。詳細はCorticonの製品マニュアル等でご確認ください。

サービスコールアウトのJARファイルは、Corticonのルールプロジェクトの右クリックメニューの「プロパティ」「Corticon Extensions」で追加設定を行うことで、ルールフローの編集画面から利用することができます。

このサービスコールアウトを使用するには、Corticonの語彙(ecore)に最低限以下のエンティティ、属性、関連性が必要です。

上記エンティティの各データや関連性はルールへの入力値として与えることが可能ですし、ルール内で動的に作成・変更しても問題ありません。またルールの実装で必要な他のエンティティや属性があれば任意で追加することが可能です。

サービスコールアウトを実行する最低限の語彙(ecore)、ルールフロー(erf)およびルールテスト(ert)を作成したサンプルのルールプロジェクトは以下になります。

このサンプルでは、DataRobotのデモとしてよく利用されている東京23区の賃貸物件の適切な賃料を予測するモデルを実行します。そのため、語彙の「dr_input」エンティティにはこの賃貸料の予測に必要な各属性を作成しています。

DataRobotの予測モデルの特徴量名とCorticonの「dr_input」内の属性名が異なるものに関しては「dr_mapping」エンティティで名前変換の設定をします。また、画像ファイルへのパスが入力される属性は同じく「dr_mapping」エンティティのimage_flgでtrueを設定します。

ルールテスト(ert)を実行すると、DataRobotの予測結果は「dr_input」の子エンティティ「dr_output」として返ってきます。

上記テスト画面上で黒塗りしているDataRobotの接続情報部分はサンプル内のルールテスト(ert)ファイルからが取り除いておりますので、実際に動作させるには正しい情報をあらためて入力する必要があります。
また画像ファイルへのパスがルールテスト(ert)の入力データとして入っておりますが、指定されている画像ファイル実体に関しては本記事では準備しておりませんので、もし実際に動作させる場合は画像ファイルも適宜準備する必要があります。

なお、本記事のサンプルプロジェクトのルールフロー(erf)では、作成したサービスコールアウトだけを実行するようにしていますが、他のルールを追加することも可能です。本記事の冒頭にあるような前処理・後処理をCorticonで実装するには、サービスコールアウト(予測モデル実行)の前後にルールを追加し、動的に予測モデルへの入出力を操作することで実現できます。

まとめ

DataRobotではデプロイされた予測モデルを他システムから実行するための便利なREST APIがあらかじめ用意されているため、Corticonなどの様々なプログラム言語や製品から比較的容易に予測モデルを呼び出すことが可能です。

Corticonでも本記事のような拡張機能を実装することで、ルール内から機械学習の予測モデルを実行し結果を利用することができます。

このように、ルールベースAI「Corticon」と機械学習「DataRobot」を組み合わせたディシジョンインテリジェンスソリューションで、より柔軟で高精度の意思決定システムを実現できる場合がありますので、ぜひご検討ください。


「Corticon Tech コラム」記事一覧

「Corticon Tech コラム」記事一覧はこちらから

ページトップへ戻る


この記事をシェアする

おすすめ記事

この記事のハッシュタグ #Progress Corticon #Corticon Tech コラム から関連する記事を表示しています。