レッドハットのソリューションアーキテクトの森です。
Red Hat Decision Manager は、v7.11より Kogito の一部機能が製品として正式にサポートされるようになりました。 Kogito とは、クラウドに最適化されたビジネスアプリケーションを構築するための技術で、業務ルールをマイクロサービスとして開発をすることが今までよりもお手軽にできるようになります。
今回は、Kogito Online Editor を使って、意思決定の機能をマイクロサービスとして OpenShift へデプロイしてみようと思います。
Kogito Online Editor とは
Webブラウザで DMN、BPMN、PMMLファイルを直接編集することができるオンラインエディタです。 DMNファイルについては、ブラウザ上で入力を与えて、出力の内容の確認を行なったり、OpenShiftと連携してへDMNをデシジョンサービスとしてデプロイを行う、ということが可能になっています。
※ DMN の入出力の確認、及びOpenShiftへの連携は、別途 KIE Tooling Extended Services のインストールが必要になります。
※ OpenShiftと連携してのデプロイはお試し版となっております。
事前準備
今回は、あらかじめ用意されているサンプルに少し手を加えたものを使用します。以下のURLをコピーして、Open from source
からファイルを開いていきましょう。
https://gist.github.com/kamorisan/6c911ffd7273ee6951b70c95eb4dc58a
以下のような画面がオープンします。
DMN のサンプルの中身については後程解説をします。先に使用するための事前準備をしていきましょう。
KIE Tooling Extended Services のインストール
上部メニューの
Deploy
、もしくはRun
をクリックしていくと、Set up
のウィンドウが開きますので、ナビゲーションに従って進めていきます。インストール後、アプリケーションを実行していきます。上部メニューの
Deploy
の左のアイコンが、赤から緑に変わっていればOKです。Run
メニューを押すと、DMN検証用の入力・出力のフォームが表示されるようになります。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
をクリックします。先ほど登録をしたアカウントの情報でログインをした後、SMSによる認証があります。 SMSを受信可能な電話番号を入力して、
Send Code
をクリックしてください。SMSで6桁のコードが送信されますので、入力して
Verify Code
をクリックします。Start using your sandbox
をクリックして、起動をします。Kogito Online Editor に OpenShift 認証情報を登録
Developer Sandbox にアクセスできたら、OpenShiftの認証情報を取得して、Kogito Online Editor と連携できるようにします。 OpenShift Web Console の右上のユーザー名をクリックして、
copy login command
を選択します。display token をクリック後、以下のようなログイン情報が表示されますので、真ん中の
Log in with this token
の、--token=*****
、--server=*****
の部分をコピーしておきます。Kogito Online Editor に戻り、上部メニューの
Deploy
をクリックし、Setup
を選択してください。Namespace
は、ユーザーID+-dev
、Host
は先ほどの認証情報の--server=
以降の内容を、Token
は、--token=
以降の内容を貼り付けます。 入力したら、Save
をクリックしてください。これで事前準備は完了です!
サンプルの DMN をデプロイしてみる
それでは、サンプルの DMN を解説していきます。
今回のサンプルは、住宅ローンの事前審査を自動判定するルールで、 DTI(Debt To Income)、とクレジットの信用スコアを元に判定を行なっています。
DTI とは、住宅ローン債務者の年間返済額の年収に対する比率で、フロントエンド比率、バックエンド比率の2つの指標があります。 * フロントエンド比率: 総住宅費(住宅ローンの毎月の支払額と、住宅にかかる税金や保険料の合計)を収入で割った比率 * バックエンド比率: 総住宅費に加え、クレジットカードや自動車ローンなどの他の種類の債務の合計を収入で割った比率
今回のサンプルルールではフロントエンド比率は28%以下、バックエンド比率は36%以下が望ましいとされています。
クレジットの信用スコアについては、FICOスコアを対象としたものになっています。 FICOスコアは300~850点の間で評価され、 例えば650点以上であれば健全であるとの判断をします。
参考リンク: www.myfico.com
DMNのデシジョンノード(長方形)をクリックし、左に表示される 編集
アイコンをクリックすると、設定されている各デシジョンの内容が確認できます。
・クレジットスコアの判断内容
・フロントエンド比率の計算
・バックエンド比率の計算
それでは、実際に入力を与えて動かしてみましょう。上部メニューの Run
をクリックし、Inputsフィールドに必要項目を入力していきます。
- Credit Score(クレジットスコア): 700
- Applicant Data
- Monthly
- Income(月の収入): 2000
- Repayments(月の総返済額): 450
- Expenses(その他経費): 200
- Tax(税金): 50
- Insurance(保険料): 150
- Monthly
- Requested Product
- Rate(金利): 1.0
- Term(返済期間(月)): 120
- Amount(ローン金額): 40000
この他の項目は、とりあえずは空欄でも構いません。Outputsフィールドに出力結果が表示されていると思います。
上記の入力であれば、ローンの事前審査結果は Qualified
となっていますが、
例えば、Income
の値を 2000 -> 1900 に変更すると、フロントエンド比率の計算が28%を超えてしまうため、Not Qualified
となることが確認できるかと思います。
続いて、Developer Sandbox へのデプロイを実施してみましょう。
上部メニューの Deploy
-> Deploy your model
-> Confirm
をクリックします。
Quarkus 上で動作するアプリケーションとして、Developer Sandbox にデプロイされます。 Developer Sandbox の Web Console を確認してみましょう。 アプリケーションのPodの円の外側の色が濃い青になればデプロイ完了です。
デプロイされたデシジョンサービスは、REST APIで呼び出して実行をすることができます。
Swaggerも内包されていますので、利用可能なAPIを確認してみましょう。
以下のURLにアクセスします。{Route_URL}
の部分は、デプロイされたアプリケーションをクリックし、Resource
タブの下の方にある Routes
のURLに差し替えてください。
https://{Route_URL}/q/swagger-ui/
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 } }
実行すると、以下のような出力が返ってくると思います。
{ "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 のより詳しい情報については、こちらのドキュメントも参考にしてみてください。
また、Kogito Online Editor から Developer Sandbox for Red Hat OpenShift へのデシジョンサービスのデプロイについてはお試し版となっております。 現在は以下の制限がありますので、注意してください。
- Developer Sandbox for Red Hat OpenShift との連携について、認証情報のトークンは毎日更新する必要があります。
- デプロイしたアプリケーションの変更はできません。(修正した場合は新規にデプロイをする必要があります)
- デプロイできるアプリケーションの数の上限は10です。
- デプロイしたアプリケーションは8時間後にダウンします。(手動での再起動は可能です)