リース会社の財務部が、満了したリース物件の残価と中古売却の実績から、新しい見積の残価の参考になる事例を OpenSearch で探す
残価を設定するリースの見積の依頼が来たときに、満了した過去の契約から物件の種類・型式・取得価額・期間の近い事例を探します。当時の残価の設定率と、満了後に実際に売れた額の割合を、契約番号付きで並べます。
- 生成AI
- Azure OpenAI Service/ChatGPT/Claude
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 対象業界
- 商社/金融
- 対象部門
- 営業/財務
- 対象業務
- 情報検索/比較検討
- 主な課題
- データ分析に時間がかかる/判断に時間がかかる/属人化している
- AIで行う処理
- 検索(RAG)
- 主な効果
- 判断支援/属人化解消/検索時間短縮
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 担当が営業からの依頼のメールを読み、物件の種類・メーカー・型式・取得価額・期間・使い方を書き出す
- 残価の目安表から、物件の種類と期間に当たる率を引く
- 契約管理の仕組みから満了した契約を書き出し、表計算で物件の種類とメーカーで絞る
- 型式・取得価額・期間の近い行を目で選び、売却の記録を1件ずつ開いて売れた額と時期を見る
- 売れた額を取得価額で割り、当時の設定率と見比べる
- 目安表の率を上げ下げして残価の設定率を決め、根拠をメモにして営業へ返す
- 人担当が営業からの依頼のメールと見積書の文を画面に貼り、検索のボタンを押す
- 自動生成AIが依頼から、物件の種類・メーカー・型式・取得価額・期間・使い方を書かれたまま取り出す
- 自動Lambda が金額を円の整数に、期間を月数にそろえ、物件の種類を区分の値にする
- 自動OpenSearch が物件の種類と期間と満了時の扱いで絞り、型式・取得価額・売却の時期の近さで並べる
- 自動OpenSearch が同じ条件の事例について、売却の割合と設定率の分布を `percentiles` で集計する
- 自動生成AIが上位の事例を、当時の設定率・売れた額の割合・違う点を記録のまま並べた表にする
- 人担当が事例と分布を見て、目安表の率を上げ下げして残価の設定率を決め、営業へ返す
各工程の詳しい説明を読む
- 担当が営業からの依頼のメールを読み、物件の種類・メーカー・型式・取得価額・期間・使い方を書き出す
- 残価の目安表から、物件の種類と期間に当たる率を引く
- 契約管理の仕組みから満了した契約を書き出し、表計算で物件の種類とメーカーで絞る
- 型式・取得価額・期間の近い行を目で選び、売却の記録を1件ずつ開いて売れた額と時期を見る
- 売れた額を取得価額で割り、当時の設定率と見比べる
- 目安表の率を上げ下げして残価の設定率を決め、根拠をメモにして営業へ返す
(a)近い事例を探すのが記憶と表計算頼み。 3番目と4番目は、どの型式が同じ系統か、どのメーカーの中古が強いかを知っている担当ほど早く終わります。経験の浅い担当は、絞り込みの条件を何度も変えて行を探します。
(b)満了時の扱いが混ざる。 お客様が買い取った契約と、返ってきて中古で売った契約では、売れた額の意味が違います。再リースで3年延ばしてから売った物件は、5年の見積の参考にはなりません。 表計算ではこの区別を列で見分けるしかなく、急ぐと混ざります。
(c)割り算と見比べに時間がかかる。 5番目は、事例ごとに電卓か表計算で割合を出し、当時の設定率と並べます。事例が10件あれば、10回の割り算と見比べです。
(d)根拠が残らない。 6番目のメモは担当ごとに書き方が違い、半年後に「なぜこの残価にしたか」を聞かれても、どの事例を見たかが分かりません。
- 【人】 担当が営業からの依頼のメールと見積書の文を画面に貼り、検索のボタンを押す
- 【自動】 生成AIが依頼から、物件の種類・メーカー・型式・取得価額・期間・使い方を書かれたまま取り出す
- 【自動】 Lambda が金額を円の整数に、期間を月数にそろえ、物件の種類を区分の値にする
- 【自動】 OpenSearch が物件の種類と期間と満了時の扱いで絞り、型式・取得価額・売却の時期の近さで並べる
- 【自動】 OpenSearch が同じ条件の事例について、売却の割合と設定率の分布を
percentilesで集計する - 【自動】 生成AIが上位の事例を、当時の設定率・売れた額の割合・違う点を記録のまま並べた表にする
- 【人】 担当が事例と分布を見て、目安表の率を上げ下げして残価の設定率を決め、営業へ返す
5番目の分布を OpenSearch で出すのは、数字をAIの文の中で作らせないためです。 生成AIに10件の割合を読ませて「中央値は〜」と書かせると、読み違いや丸め方の違いが、もっともらしい数字として紛れます。 割合も分布も、索引の値と集計の結果をそのまま画面に出します。
7番目で決めるのは担当です。 画面に出るのは過去の事例と分布だけで、「今回の残価は〜%がよい」という提案は出しません。 物件の今の相場、お客様の使い方、会社としての残価の方針を合わせて決めるのは、財務部の仕事です。
02今回想定するシステム構成
契約管理の仕組み(満了した契約・物件・満了時の扱い・売却の記録) ▼【トリガー】毎晩の書き出し(新しく満了・売却した契約) AWS Lambda ── 売却の割合・設定率・売却までの月数を計算し、区分をそろえる ▼ Amazon OpenSearch Service │ 契約の索引:物件の種類・メーカー・型式・型式の系統・取得価額・期間(月) │ 満了時の扱い・売却の日・設定率・売却の割合・稼働時間 ▼【人】担当が依頼を貼る AWS Lambda ├──▶ Claude(Amazon Bedrock)── 依頼を物件の条件に読み替える ├──▶ OpenSearch ── 絞り込み+近さの並べ替え(function_score)+割合の分布(percentiles) ├──▶ Claude(Amazon Bedrock)── 事例を記録のまま並べた表と、違う点のメモ ▼ 担当の画面 ──【人】設定率を決めて営業へ返す
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Amazon OpenSearch Service(bool の filter、range、function_score の gauss、percentiles) | Azure AI Search、Vertex AI Search(Agent Search) |
| 生成AI | Claude(Amazon Bedrock の Converse API、構造化出力) | Azure OpenAI(Microsoft Foundry)、OpenAI API |
| 連携 | AWS Lambda(取り込み、割合の計算、読み替えと検索の呼び出し) | AWS Step Functions |
| 保管 | Amazon S3(取り込みの写し、依頼と事例と決めた設定率の記録) | 社内のファイルサーバー |
契約管理の仕組みには、この構成から書き込みません。 決めた残価の設定率は、担当がいつもの見積の画面に入れます。
Amazon OpenSearch Service は、AWS のクラウドで OpenSearch のクラスターを立てて動かすための管理されたサービスです。 AWS の公式ページでは、OpenSearch Service のドメインは OpenSearch のクラスターと同じ意味で、インスタンスの種類や数、ストレージを設定して使うとされています。索引に入るのは契約と物件の記録だけで、借り手の会社名は入れません(第13章)。
03どうやって実装するのか
処理の起点を決める
起点は2つあります。毎晩の満了した契約の取り込みと、担当の検索のボタンです。
取り込みは、前の日までに満了・売却・買取が確定した契約を書き出し、索引に加えます。売却が確定していない満了の契約も「売却待ち」として入れます。 近い物件が何台返ってきているかも、残価を決める材料になるからです。売却が確定した日に、同じ文書を上書きします。
検索のボタンは、担当が依頼のメールと見積書の文を貼った後に押します。型式の系統の表(第7章「前処理」)と残価の目安表は、財務部が月に1回見直し、見直した日を記録します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 見積の依頼 | 営業のメールの本文、見積書の文(物件・取得価額・期間・使い方) | 担当が貼る |
| 満了した契約 | 契約番号、物件の種類、メーカー、型式、年式、取得価額、期間(月)、設定した残価の額と率、満了日 | 契約管理の仕組み |
| 満了時の扱い | 返却して売却/お客様が買取/再リースの後に返却して売却/途中解約/売却待ち | 契約管理の仕組み |
| 売却の記録 | 売却の日、売却額、売却の経路(業者への売却・入札・再リース先への販売)、稼働時間や状態のメモ | 契約管理の仕組み |
| 型式の系統の表 | 同じ系統として見てよい型式の組(後継の型式、出力違い) | 財務部で作る表 |
| 残価の目安表 | 物件の種類と期間ごとの目安の率 | 財務部の表計算 |
質を決めるのは、満了時の扱いの区分です。 同じ「売れた額」でも、返却して業者に売ったものと、お客様が買い取ったものでは意味が違います。お客様の買取の額は、契約で決めた額であることが多く、中古の相場を表しません。 区分を必ず持たせ、検索の既定では「返却して売却」だけを使います。
借り手の会社名と担当者名は、索引にも生成AIにも渡しません。 物件の記録と金額と日付だけで、近い事例は探せます。
データの取得方法を決める
| 取るもの | どこから | どう取るか |
|---|---|---|
| 物件の種類が同じ事例 | 契約の索引 | filter の term(asset_class) |
| 期間が近い事例 | 契約の索引 | filter の range(term_months の gte・lte) |
| 返却して売却した事例 | 契約の索引 | filter の term(end_type)と exists(sale_ratio) |
| 型式・取得価額・売却の時期の近さ | 契約の索引 | function_score の gauss(cost_yen・sold_on)と型式の系統の term |
| 売却の割合と設定率の分布 | 契約の索引 | aggs の percentiles(sale_ratio・set_ratio) |
絞り込みは bool の filter に置きます。 OpenSearch の公式のドキュメントでは、filter の句は一致するかどうかだけを決め、関連度の点数には加わらず、結果がキャッシュされうるとされています。物件の種類と期間と満了時の扱いは、合うか合わないかの条件なので、点数に混ぜません。
近さの並べ替えは function_score の減衰関数で行います。 公式のドキュメントでは、減衰関数(gauss・exp・linear)は数値・日付・位置の項目に使え、origin からの距離で点数を下げ、offset の内側は1点、offset に scale を足した距離で decay の点(既定は0.5)になるとされています。取得価額は依頼の額を origin に、売却の日は今日を origin にして、新しい売却ほど上に来るようにします。
ここで、公式のドキュメントの一文に注意します。 減衰関数は、項目が無い文書に1点を返すとされています。売却の日が空の「売却待ち」の契約は、何もしないといちばん新しく売れた事例と同じ点数で上に来ます。そのため、並べ替えの検索では exists で sale_ratio のある文書だけに絞り、売却待ちは別の検索で台数だけを数えます。
GET /lease_contracts/_search
{
"size": 10,
"_source": ["contract_no", "maker", "model", "model_family", "cost_yen", "term_months",
"set_ratio", "sale_ratio", "sold_on", "months_to_sale", "sale_route", "hours"],
"query": { "function_score": {
"query": { "bool": {
"filter": [
{ "term": { "asset_class": "machining_center" } },
{ "range": { "term_months": { "gte": 48, "lte": 72 } } },
{ "term": { "end_type": "returned_sold" } },
{ "exists": { "field": "sale_ratio" } } ],
"should": [
{ "term": { "model_family": { "value": "A-VMC-500", "boost": 2 } } },
{ "term": { "maker": "A" } } ] } },
"functions": [
{ "gauss": { "cost_yen": { "origin": 24000000, "offset": 2000000, "scale": 6000000 } } },
{ "gauss": { "sold_on": { "origin": "now", "offset": "180d", "scale": "730d" } } } ],
"score_mode": "multiply", "boost_mode": "multiply" } },
"aggs": {
"sale_ratio_pct": { "percentiles": { "field": "sale_ratio", "percents": [25, 50, 75] } },
"set_ratio_pct": { "percentiles": { "field": "set_ratio", "percents": [25, 50, 75] } } }
}
分布の集計は、上位10件ではなく、絞り込みに合ったすべての事例にかかります。 公式のドキュメントでは、percentiles は数値の項目の指定した百分位の値を見積もる集計で、既定の百分位は1・5・25・50・75・95・99、値は近似(既定は tdigest)とされています。分布の母集団を決めるのは、並べ替えではなく filter の条件です。
AIへ渡す前に整形する
- 割合を計算して持たせる …
sale_ratio=売却額÷取得価額、set_ratio=設定した残価の額÷取得価額を、取り込みの Lambda で小数4桁にします - 期間を月数にそろえる … 「5年」「60か月」を 60 にし、再リースの期間は
term_monthsに足さずrelease_monthsに分けて持ちます - 満了時の扱いを区分にする …
returned_sold(返却して売却)、customer_bought(買取)、released_sold(再リースの後に売却)、terminated(途中解約)、awaiting_sale(売却待ち) - 型式の系統を付ける … 型式の系統の表から
model_familyを付けます。表に無い型式は空のまま残します - 売却までの月数を出す … 満了日から売却の日までの月数を
months_to_saleに持ちます - 依頼の側をそろえる … 「2,400万円」を 24000000 に、「5年」を 60 にし、物件の種類を区分の値にします
1番目の割合を取り込みのときに計算するのは、検索のたびに計算させないためです。 割合を索引の値として持てば、percentiles がそのまま集計でき、画面の数字と記録の数字が1対1で対応します。
2番目で再リースの期間を分けるのは、第3章の(b)を防ぐためです。 5年の契約を3年再リースして売った物件は、8年使った物件です。term_months に足すと期間の range に入らなくなり、足さないと5年の物件として混ざります。 分けて持ち、検索の既定では end_type で外します。
AIに処理させる
AIの仕事は2つです。 依頼の文を物件の条件に読み替えることと、上位の事例を記録のまま並べ、依頼との違う点をメモにすることです。
| させること | させないこと |
|---|---|
| 物件の種類・メーカー・型式・取得価額・期間・使い方を書かれたまま取り出す | 書かれていない型式や年式を推し量ること |
| 物件の種類を、決められた区分から選ぶ | 金額や割合を計算すること、平均や中央値を出すこと |
| 事例ごとに、依頼と違う点(型式・期間・使い方・稼働時間)を記録から書く | 今回の残価の設定率を提案すること |
| 書かれていない項目をまとめる | 中古の相場の見通しや、今後の値動きを書くこと |
残価の設定率を提案させないのが、この構成でいちばん大事な線です。 生成AIに事例と分布を渡して「適切な残価は」と聞けば、もっともらしい率が返ります。その率には、今の中古の相場も、会社の残価の方針も、お客様の与信も入っていません。 画面に率の提案が出れば、忙しい日ほどその数字が見積に写ります。
平均や中央値を書かせないのも同じ理由です。 分布は OpenSearch の集計の値をそのまま画面に出し、AIの文の中には数字を作らせません。
指示内容を固定する
1回目(依頼の読み替え)の指示です。
あなたはリース会社の財務部で、残価を設定する見積の依頼を整理する立場です。
【依頼】から、過去の契約を探すための条件を取り出してください。
【取り出すもの】
- asset_class: 物件の種類。【物件の種類の区分】から1つ選ぶ。選べなければ空
- maker_raw: メーカー。書かれたまま
- model_raw: 型式。書かれたまま
- cost_raw: 取得価額。書かれたまま(「2,400万円」など)
- term_raw: リースの期間。書かれたまま(「5年」など)
- usage_raw: 使い方。書かれたまま(「2交代」「屋外」など)
- missing: 書かれていない項目の名前
【厳守事項】
- 型式・年式が書かれていなければ空にしてください。推し量らないでください。
- 金額と期間は、単位を直さず書かれたまま写してください。計算しないでください。
- 残価の率や額について、何も書かないでください。
- お客様の会社名・担当者名は写さないでください。
【物件の種類の区分】{asset_classes}
【依頼】{request_text}
2回目(事例の表とメモ)の指示です。
あなたはリース会社の財務部で、残価を決める担当に過去の事例を示す立場です。
【事例】は満了した契約の記録です。数字はすべて記録の値です。
【書き方】
- 事例ごとに、契約番号・型式・取得価額・期間・設定率・売却の割合・
売却の日・売却の経路を、記録の値のまま書いてください。
- 事例ごとに、【依頼の条件】と違う点を differences に書いてください。
型式の違い、期間の違い、使い方や稼働時間の違いを、記録にある範囲で書きます。
- 記録に無い項目は「記録なし」と書いてください。
【厳守事項】
- 割合・金額を計算しないでください。平均・中央値・差を書かないでください。
- 今回の残価の率や額を提案しないでください。
- 「高く売れる」「相場が強い」など、記録に無い見通しを書かないでください。
- 事例どうしを比べて、どちらが正しいかを書かないでください。
【依頼の条件】{conditions}
【事例】{hits}
「差を書かない」を入れるのは、2つの割合が並ぶとAIが自分で引き算をするからです。 差は画面の側でプログラムが出します。
出力形式を固定する
Bedrock の Converse API の outputConfig.textFormat に JSON スキーマを渡し、2回目は次の形で受け取ります。
{
"request_no": "",
"conditions": { "asset_class": "", "maker": "", "model": "", "cost_yen": 0,
"term_months": 0, "usage": "" },
"cases": [
{ "contract_no": "", "model": "", "cost_yen": 0, "term_months": 0,
"set_ratio": 0, "sale_ratio": 0, "sold_on": "", "sale_route": "",
"differences": [""] } ],
"missing": [""]
}
AWS の公式ページでは、Converse API の outputConfig.textFormat に JSON スキーマを渡すと応答がスキーマに沿うとされています。すべての object に additionalProperties: false が要り、数値の minimum・maximum は使えません。 新しいスキーマは初回に文法を組み立てるため最大で約90秒かかり、組み立てた文法は24時間キャッシュされるとされています。呼び出しの読み取りの待ち時間は120秒以上にします。
1つ目の理由は、AIが返した数字を索引の値と照合できることです。 cases の contract_no ごとに、set_ratio・sale_ratio・cost_yen が索引の _source と一致するかを Lambda が確かめます。1つでも違えば、その事例の行は索引の値で置き換え、差し替えたことを記録します。
2つ目は、分布の表をAIの出力と分けて持てることです。 画面には、percentiles の集計の結果を次の形で別に出します。
| 項目 | 25% | 50% | 75% | 事例の数 |
|---|---|---|---|---|
売却の割合(sale_ratio) | 集計の値 | 集計の値 | 集計の値 | hits.total |
設定率(set_ratio) | 集計の値 | 集計の値 | 集計の値 | hits.total |
| 売却待ちの台数 | - | - | - | 別の検索の件数 |
事例の数を必ず並べます。 事例が3件しかない分布と300件ある分布では、同じ50%でも重みがまるで違います。事例が5件未満のときは、分布の行を出さずに「事例が少ない」とだけ出します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 契約管理の仕組み | 毎晩の書き出し(読み取りのみ) | 満了した契約と売却の記録 |
| Amazon OpenSearch Service | Lambda からの登録・検索 | 契約の索引、絞り込み・並べ替え・分布 |
| Amazon Bedrock | Converse API(Claude) | 読み替えと事例の表 |
| 担当の画面 | 社内の画面 | 依頼の貼り付け、事例と分布、決めた設定率と根拠の記録 |
担当が決めた設定率は、画面で「見た事例の契約番号」と一緒に S3 に残します。 見積の画面への入力は、担当がいつものとおり行います。この構成から見積や契約の記録を書き換える経路は作りません。
人が確認する
- 読み替えを見る … 物件の種類の区分・取得価額・期間が、依頼のとおりに取り出されているかを確かめます
- 事例の数を見る … 分布の事例の数が少なければ、期間の幅や物件の種類の区分を広げて引き直します
- 事例を選ぶ … 上位の事例のうち、使い方や稼働時間が今回と違いすぎるものを外します
- 今の相場を足す … 中古の業者からの直近の買取の見積など、索引に無い情報を担当が確かめます
- 設定率を決めて根拠を残す … 目安表の率から上げ下げした理由と、見た事例の契約番号を残します
4番目を省かないでください。 索引にあるのは過去に売れた額で、満了は5年後です。 売却の日を並べて出すのは、相場の強かった時期の偏りを担当が見て取れるようにするためです。
例外に対処する
| 起きること | 対応 |
|---|---|
| 物件の種類が区分に読み替えられない | asset_class を空にし、担当が区分を選んでから引く |
| 型式の系統が表に無い | 系統の条件を外し、メーカーと取得価額で並べる。系統の表に足す候補として記録する |
| 事例が5件未満 | 分布を出さず、期間の幅を広げた件数と、物件の種類を1つ上の区分にした件数を示す |
| 売却待ちが多い | 売却待ちの台数を別に示す(返ってきた物件が売れ残っている兆し) |
| 取得価額が大きく外れる事例しか無い | 取得価額の近さの点が低いことを画面に出し、事例として使うかを担当が決める |
| AIの数字が索引と合わない | 索引の値で置き換え、置き換えたことを記録する |
| 構造化出力が返らない | 事例の一覧と分布だけを出し、違う点のメモは担当が書く |
4行目は相場の兆しの行です。 返ってきた物件が売れ残っていれば、今の相場は過去の分布より弱い可能性があります。
記録を残す
- 依頼ごとの、依頼の文(会社名を伏せたもの)、1回目の JSON、担当が直した箇所
- 検索の条件、上位の事例、分布の集計の結果と事例の数、売却待ちの台数
- AIの数字を索引の値で置き換えた記録
- 担当が決めた設定率と、見た事例の契約番号、上げ下げした理由
- 型式の系統の表と残価の目安表を見直した日と担当
4つ目が、いちばん残したい記録です。 5年後にその契約が売れたとき、決めたときに見た事例と分布と、実際の売却の割合を並べられます。
04実装レベルの3段階
半自動化で、1件30分が18分程度になります。 事例の選び出しと割合の見比べはほぼなくなりますが、依頼の書き出しと根拠のメモが残ります。本格構成で10分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化を1か月使うと、どの物件の種類で事例が少ないか、型式の系統の表のどこが抜けているかが残ります。系統の表を整えてから本格構成に進むほうが、上位の事例が確かになります。
05工数削減シミュレーション
導入後 240件 × 10分 ÷ 60 = 40 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 工作機械・建設機械・フォークリフト・印刷機などの物件で残価を設定するリースを扱い、残価の見積の依頼が毎月数百件ある中堅のリース会社。満了した契約と中古売却の記録は契約管理の仕組みに残っているのに、近い事例を探すのが表計算の絞り込みと担当者の記憶に頼っている場合。残価の設定率を決めた根拠を、後から説明できる形で残したい場合。AWS を使える担当か委託先がいる場合。
- 残価を設定しないフルペイアウトのリースが大半で、残価の見積がほとんど無い場合。満了後の売却の金額が記録に残っておらず、物件の返却の有無しか分からない場合(先に売却の記録を整えます)。扱う物件の種類が少なく、担当者が全部の売却の実績を把握している場合。なお、残価の設定率を決めること、与信の判断、会計上の扱いの判断は、この構成では代替できません。過去の記録から近い事例を探し、実際の売却の割合を並べるまでです。
07最小構成で試す方法
- 先月の残価の見積から20件を選ぶ(工作機械・建設機械・フォークリフト・印刷機を混ぜる)
- それぞれについて、担当が当時見た事例と、決めた設定率を書き出す
- 満了した契約を表計算に書き出し、満了時の扱いの区分と、売却の割合の列を足す
- 20件の依頼の文を手元のAIサービスに貼り、「物件の種類・メーカー・型式・取得価額・期間・使い方を書かれたまま取り出してください。残価の率を書かないでください」と指示する(お客様の会社名は伏せてから貼ります)
- 取り出した条件で表計算を絞り、当時の担当が見た事例が出てくるかを見る
- 絞った事例の売却の割合を表計算の関数で並べ、当時の設定率と見比べる
3番目の区分の列を作る作業が、この構成の準備のほとんどです。 区分を付けてみて、買取や再リースの契約がどれだけ混ざっていたかが分かります。
| 出てきた内容 | 判断 |
|---|---|
| 当時の事例が見つかり、割合も並べられた | OpenSearch の索引に進む |
| 型式を推し量った・残価の率を書いた | 指示の書き方で直る。構成は有効 |
| 売却額や満了時の扱いが記録に無い契約が多い | 契約管理の記録の整備が先 |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 売却待ちの契約が上位に来る | 減衰関数は項目の無い文書に1点を返す。exists で sale_ratio のある文書に絞る |
| 買取や再リースの事例が分布に混ざる | end_type を区分で持ち、検索の既定は returned_sold だけにする |
| 分布が上位10件の分布だと思われる | 集計は filter に合った全件にかかる。事例の数を必ず並べる |
| 事例が少ないのに分布が出る | 5件未満は分布を出さない |
| AIが設定率と売却の割合の差を書く | 差を書かせない。差は画面の側で出す |
| 画面の数字と記録が合わない | AIの数字を索引の値と照合し、違えば置き換える |
| 型式の系統が無い新しい型式が引けない | 系統の条件を外して引き、系統の表に足す候補として残す |
上の2行は、検索がきれいに動いているように見えて起きる失敗です。 1行目は売れていない契約が上に来て、2行目は相場を表さない額が分布に混ざります。どちらも画面を見ただけでは気づきません。 第8章の20件で、当時の担当が見た事例が出てくるかを必ず見てください。
3行目と4行目は、分布の読み違いです。 25%・50%・75%の値は、事例の数と並べて初めて意味を持ちます。公式のドキュメントのとおり値は近似なので、小数第何位まで見るかも決めておきます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 満了した契約の物件・金額・設定した残価・売却の記録、営業からの見積の依頼です。設定した残価と売却の額は、リース会社の採算そのもので、外に出せない情報です。
- 借り手の情報を外す … 借り手の会社名・担当者名・与信の情報は、索引にも Claude にも渡しません。渡すのは物件と金額と日付だけにします
- 残価を決めさせない … 画面に出すのは事例と分布までです。設定率を決めるのは財務部の担当で、会社の残価の方針に沿って決めます
- 数字を作らせない … 割合は取り込みの計算、分布は OpenSearch の集計で出し、AIの文の中の数字は索引の値と照合します
- 索引への接続を限る … OpenSearch のドメインには、Lambda と財務部の画面だけが接続できるようにします。営業の画面から事例の売却額が直接見えないようにします
- 会計と与信の判断に使わない … この構成の分布は、見積の残価を決める材料です。会計上の残価の見積りや、借り手の与信の判断には、それぞれの手続きで決めた方法を使います
- 決めた根拠を残す … 見た事例と分布と決めた理由を、契約ごとに残します
誤りが起きた場合のリスクは、買取や売却待ちの事例が混ざって残価を高く置きすぎること、AIの文の数字を根拠にすること、過去の相場の偏りをそのまま写すことの3つです。 満了時の扱いの区分と exists の絞り込み、索引の値との照合、売却の日と事例の数の表示で防ぎます。
10まず何から始めるか
1週目:満了した契約を見る
満了した契約を書き出し、満了時の扱いと売却の額が空の契約を数えます。見積の多い物件の種類について、直近5年の満了に区分を付けます。
2週目:20件で試す
第8章のとおり、先月の見積の依頼20件で、当時の担当が見た事例が出てくるかを見ます。型式を推し量っていないか、残価の率を書いていないかを最優先で見ます。
3週目:区分の規則と型式の系統の表を作る
満了時の扱いの区分の付け方を、財務部で決めて表にします。買取・再リース・途中解約をどう扱うかを、ここで決め切ります。 あわせて、見積の多いメーカーの型式の系統の表を作ります。
4週目:索引を作る
OpenSearch に契約の索引を作り、絞り込みと近さの並べ替えと分布を出せるようにします。この時点では、生成AIの読み替えと事例の表は使いません。
2か月目: 依頼の読み替えと事例の表、索引の値との照合、根拠の記録を足します。3か月目以降: 事例が5件未満だった依頼の数、売却待ちの台数、決めた設定率と分布の50%の差を毎月数えます。経験の浅い担当が、ベテランと同じ事例と分布を見て設定率を決め、その根拠を残せた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Amazon OpenSearch Service が AWS のクラウドで OpenSearch のクラスターを立てて動かすための管理されたサービスで、ドメインがクラスターと同じ意味であること | AWS: What is Amazon OpenSearch Service? | 2026-10-28 |
減衰関数(gauss・exp・linear)が数値・日付・位置の項目に使え、origin・offset・scale・decay(既定0.5)で点数を決めること。日付の origin の既定が now であること。項目の無い文書に1点を返すこと | OpenSearch: Function score query | 2026-10-28 |
percentiles が数値の項目の百分位の値を見積もる集計で、既定の百分位が1・5・25・50・75・95・99であり、値が近似(既定は tdigest)であること | OpenSearch: Percentile aggregation | 2026-10-28 |
bool の filter の句が一致するかだけを決めて点数に加わらず、結果がキャッシュされうること | OpenSearch: Boolean query | 2026-10-28 |
range の gte・lte などで項目の値の範囲を問えること | OpenSearch: Range query | 2026-10-28 |
Converse API の outputConfig.textFormat で JSON スキーマに沿った出力が得られること。additionalProperties: false が要ること。数値の minimum・maximum に対応しないこと。新しいスキーマの初回の組み立てが最大約90秒で、24時間キャッシュされること | AWS: Structured outputs(Amazon Bedrock) | 2026-10-28 |
残価の設定率、与信の判断、会計上の扱いは、財務部と経理部、会社の方針に沿って判断してください。 本記事は上記の資料で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-2170)についてのご相談はこちらから。
