Kogito-Onlineでお手軽デシジョンサービス開発

レッドハットのソリューションアーキテクトの森です。

Red Hat Decision Manager は、v7.11より Kogito の一部機能が製品として正式にサポートされるようになりました。 Kogito とは、クラウドに最適化されたビジネスアプリケーションを構築するための技術で、業務ルールをマイクロサービスとして開発をすることが今までよりもお手軽にできるようになります。

f:id:ka_mori:20211020102551p:plain:w300

今回は、Kogito Online Editor を使って、意思決定の機能をマイクロサービスとして OpenShift へデプロイしてみようと思います。

Kogito Online Editor とは

Webブラウザで DMN、BPMN、PMMLファイルを直接編集することができるオンラインエディタです。 DMNファイルについては、ブラウザ上で入力を与えて、出力の内容の確認を行なったり、OpenShiftと連携してへDMNをデシジョンサービスとしてデプロイを行う、ということが可能になっています。

※ DMN の入出力の確認、及びOpenShiftへの連携は、別途 KIE Tooling Extended Services のインストールが必要になります。
※ OpenShiftと連携してのデプロイはお試し版となっております。

f:id:ka_mori:20211020102616p:plain:w800

事前準備

今回は、あらかじめ用意されているサンプルに少し手を加えたものを使用します。以下のURLをコピーして、Open from source からファイルを開いていきましょう。

https://gist.github.com/kamorisan/6c911ffd7273ee6951b70c95eb4dc58a

以下のような画面がオープンします。

f:id:ka_mori:20211020102643p:plain:w800

DMN のサンプルの中身については後程解説をします。先に使用するための事前準備をしていきましょう。

  1. KIE Tooling Extended Services のインストール

    上部メニューの Deploy、もしくは Run をクリックしていくと、Set up のウィンドウが開きますので、ナビゲーションに従って進めていきます。

    f:id:ka_mori:20211020102727p:plain:w400

    f:id:ka_mori:20211020102745p:plain:w600

    インストール後、アプリケーションを実行していきます。上部メニューの Deploy の左のアイコンが、赤から緑に変わっていればOKです。 Run メニューを押すと、DMN検証用の入力・出力のフォームが表示されるようになります。

    f:id:ka_mori:20211020102835p:plain:w800

  2. OpenShift に連携する

    OpenShiftには、Developer Sandbox for Red Hat OpenShift という、 セルフサービスで実行する無料のクラウドホスト型のサンドボックスがあり、開発者向けの Red Hat Developer アカウントを取得(無償)すれば、 30日間無料でOpenShiftクラスタを実行できます。今回はこちらを使用していきます。

    Red Hat Developer アカウントの取得:

    既にお持ちの方は飛ばして次に進んでください。アカウントをお持ちで無い方は、こちらから登録をしてください。

    Developer Sandbox for Red Hat OpenShift の実行

    Get started in the Sandbox にアクセスして、 Launch your Developer Sandbox for Red Hat OpenShift をクリックします。

    f:id:ka_mori:20211020102903p:plain:w300

    先ほど登録をしたアカウントの情報でログインをした後、SMSによる認証があります。 SMSを受信可能な電話番号を入力して、Send Code をクリックしてください。

    f:id:ka_mori:20211020102928p:plain:w300

    SMSで6桁のコードが送信されますので、入力して Verify Code をクリックします。

    f:id:ka_mori:20211020102946p:plain:w300

    Start using your sandbox をクリックして、起動をします。

    f:id:ka_mori:20211020103001p:plain:w300

    Kogito Online Editor に OpenShift 認証情報を登録

    Developer Sandbox にアクセスできたら、OpenShiftの認証情報を取得して、Kogito Online Editor と連携できるようにします。 OpenShift Web Console の右上のユーザー名をクリックして、copy login command を選択します。

    f:id:ka_mori:20211020103114p:plain:w600

    display token をクリック後、以下のようなログイン情報が表示されますので、真ん中の Log in with this token の、--token=*****--server=***** の部分をコピーしておきます。

    f:id:ka_mori:20211020103135p:plain:w600

    Kogito Online Editor に戻り、上部メニューの Deploy をクリックし、Setup を選択してください。

    Namespace は、ユーザーID+-devHost は先ほどの認証情報の --server=以降の内容を、Token は、--token=以降の内容を貼り付けます。 入力したら、Save をクリックしてください。

    f:id:ka_mori:20211020103155p:plain:w600

    これで事前準備は完了です!

サンプルの DMN をデプロイしてみる

それでは、サンプルの DMN を解説していきます。

今回のサンプルは、住宅ローンの事前審査を自動判定するルールで、 DTI(Debt To Income)、とクレジットの信用スコアを元に判定を行なっています。

DTI とは、住宅ローン債務者の年間返済額の年収に対する比率で、フロントエンド比率、バックエンド比率の2つの指標があります。 * フロントエンド比率: 総住宅費(住宅ローンの毎月の支払額と、住宅にかかる税金や保険料の合計)を収入で割った比率 * バックエンド比率: 総住宅費に加え、クレジットカードや自動車ローンなどの他の種類の債務の合計を収入で割った比率

今回のサンプルルールではフロントエンド比率は28%以下、バックエンド比率は36%以下が望ましいとされています。

クレジットの信用スコアについては、FICOスコアを対象としたものになっています。 FICOスコアは300~850点の間で評価され、 例えば650点以上であれば健全であるとの判断をします。

参考リンク: www.myfico.com

f:id:ka_mori:20211020103348p:plain:w800

DMNのデシジョンノード(長方形)をクリックし、左に表示される 編集 アイコンをクリックすると、設定されている各デシジョンの内容が確認できます。

・クレジットスコアの判断内容

f:id:ka_mori:20211020103409p:plain:w600

・フロントエンド比率の計算

f:id:ka_mori:20211020103432p:plain:w800

・バックエンド比率の計算

f:id:ka_mori:20211020103458p:plain:w800

それでは、実際に入力を与えて動かしてみましょう。上部メニューの Run をクリックし、Inputsフィールドに必要項目を入力していきます。

  • Credit Score(クレジットスコア): 700
  • Applicant Data
    • Monthly
      • Income(月の収入): 2000
      • Repayments(月の総返済額): 450
      • Expenses(その他経費): 200
      • Tax(税金): 50
      • Insurance(保険料): 150
  • Requested Product
    • Rate(金利): 1.0
    • Term(返済期間(月)): 120
    • Amount(ローン金額): 40000

この他の項目は、とりあえずは空欄でも構いません。Outputsフィールドに出力結果が表示されていると思います。

f:id:ka_mori:20211020103551p:plain:w400

上記の入力であれば、ローンの事前審査結果は Qualified となっていますが、 例えば、Income の値を 2000 -> 1900 に変更すると、フロントエンド比率の計算が28%を超えてしまうため、Not Qualified となることが確認できるかと思います。

続いて、Developer Sandbox へのデプロイを実施してみましょう。 上部メニューの Deploy -> Deploy your model -> Confirmをクリックします。

f:id:ka_mori:20211020103611p:plain:w400

Quarkus 上で動作するアプリケーションとして、Developer Sandbox にデプロイされます。 Developer Sandbox の Web Console を確認してみましょう。 アプリケーションのPodの円の外側の色が濃い青になればデプロイ完了です。

f:id:ka_mori:20211020103636p:plain:w800

デプロイされたデシジョンサービスは、REST APIで呼び出して実行をすることができます。 Swaggerも内包されていますので、利用可能なAPIを確認してみましょう。 以下のURLにアクセスします。{Route_URL} の部分は、デプロイされたアプリケーションをクリックし、Resource タブの下の方にある Routes のURLに差し替えてください。

https://{Route_URL}/q/swagger-ui/

f:id:ka_mori:20211020103654p:plain:w600

GETメソッドが1つと、POSTメソッドが2つあります。GETメソッドは、DMNの中身をXML形式で取得するものです。POSTメソッドはデシジョンの評価を行うものですが、末尾に /dmnresult ものは、通常の出力に加えて、各デシジョンが正常に実行されたかどうか、またエラーが発生した場合はその内容も合わせて出力されるようです。

POSTメソッドの /loan-pre-qualification から実行してみます。 入力をjson形式で設定しますが、必要な項目の雛形を作成してくれているので、中身の値を変えて実行しましょう。 先ほど確認で使用した値を入れてみます。

以下をコピーして貼り付けて実行頂いてもOKです。

{
  "Credit Score": {
    "FICO": 700
  },
  "Applicant Data": {
    "Age": 30,
    "Marital Status": "M",
    "Employment Status": "Employed",
    "Existing Customer": true,
    "Monthly": {
      "Income": 2000,
      "Repayments": 450,
      "Expenses": 200,
      "Tax": 100,
      "Insurance": 100
    }
  },
  "Requested Product": {
    "Type": "Standard Loan",
    "Rate": 1,
    "Term": 120,
    "Amount": 40000
  }
}

f:id:ka_mori:20211020103725p:plain:w600

実行すると、以下のような出力が返ってくると思います。

{
  "Requested Product": {
    "Type": "Standard Loan",
    "Rate": 1,
    "Amount": 40000,
    "Term": 120
  },
  "Lender Acceptable PITI": "function Lender Acceptable PITI(  )",
  "Credit Score Rating": "Good",
  "Back End Ratio": {
    "Ratio": 0.325,
    "Result": "Sufficient"
  },
  "Lender Acceptable DTI": "function Lender Acceptable DTI(  )",
  "DTI": "function DTI( d, i )",
  "Applicant Data": {
    "Monthly": {
      "Repayments": 450,
      "Expenses": 200,
      "Insurance": 100,
      "Income": 2000,
      "Tax": 100
    },
    "Employment Status": "Employed",
    "Marital Status": "M",
    "Existing Customer": true,
    "Age": 30
  },
  "Front End Ratio": {
    "Ratio": 0.2752082427403056,
    "Result": "Sufficient"
  },
  "Loan Pre-Qualification": {
    "Qualification": "Qualified",
    "Reason": "The borrower has been successfully prequalified for the requested loan."
  },
  "PITI": "function PITI( pmt, tax, insurance, income )",
  "Credit Score": {
    "FICO": 700
  }
}

まとめ

いかがでしたでしょうか? Kogito の登場により、業務ロジックをQuarkus上での軽量なデシジョンサービスとして運用することが可能になるなど、今まで以上にマイクロサービス開発が手軽にできるようになってきています。 Kogito のより詳しい情報については、こちらのドキュメントも参考にしてみてください。

docs.jboss.org

また、Kogito Online Editor から Developer Sandbox for Red Hat OpenShift へのデシジョンサービスのデプロイについてはお試し版となっております。 現在は以下の制限がありますので、注意してください。

  • Developer Sandbox for Red Hat OpenShift との連携について、認証情報のトークンは毎日更新する必要があります。
  • デプロイしたアプリケーションの変更はできません。(修正した場合は新規にデプロイをする必要があります)
  • デプロイできるアプリケーションの数の上限は10です。
  • デプロイしたアプリケーションは8時間後にダウンします。(手動での再起動は可能です)

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。