取引先の決算データと支払の状況から社内格付を毎月見直し、格下げの候補と理由を財務部に出す
取引先の決算の指標と、自社への支払の状況から、12か月以内に支払の問題が起きる確率を見込みます。確率を社内格付の区分に当てはめ、いまの格付より下がる取引先を、効いた理由と一緒に財務部へ一覧で渡します。
- 連携・自動化
- Python
- 対象業界
- 商社/建設/物流/製造
- 対象部門
- 財務
- 対象業務
- 内容確認・チェック/集計・分析
- 主な課題
- データ分析に時間がかかる/判断に時間がかかる/属人化している
- AIで行う処理
- 予測
- 主な効果
- 判断支援/属人化解消/工数削減
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- 個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 月初に、前月に決算書や報告書が届いた取引先と、入金が遅れた取引先の一覧を作る
- 1社ずつ、決算データの表から今期と前期の数字を出し、自己資本比率・利益率・借入の重さを見比べる
- 販売管理から、直近1年の入金の記録を出し、遅れた回数と日数を数える
- 取引先台帳でいまの格付と与信枠の使い方を確かめる
- 格付の基準表と照らし、変える・変えないを決める。変えるものは理由を書く
- 格下げにするものは営業に事情を聞き、格付の会議の資料にまとめる
- 人決算書や報告書が届いたら、これまでどおり決算データの表に数字を入れる
- 自動月次の締めの翌営業日に、Pythonのプログラムが決算データの表、販売管理の入金の記録、取引先台帳を取り込む
- 自動その月の対象(決算が届いた取引先と、支払の状況が変わった取引先)を選ぶ
- 自動学習済みのモデルが、取引先ごとに12か月以内に支払の問題が起きる確率を見込む
- 自動確率を格付の区分に当てはめ、いまの格付と比べて「格下げ候補」「格上げ候補」「据え置き」「要確認」に分ける
- 自動確率に効いた項目を上から3つ取り出し、理由の文にして一覧に添える
- 人担当者が「格下げ候補」と「要確認」を開き、営業に事情を聞いて、格付の案を決める
- 人課長が格付の会議で承認し、取引先台帳の格付を直す
- 自動12か月後、見込んだ確率と、実際に支払の問題が起きたかを突き合わせる
各工程の詳しい説明を読む
- 月初に、前月に決算書や報告書が届いた取引先と、入金が遅れた取引先の一覧を作る
- 1社ずつ、決算データの表から今期と前期の数字を出し、自己資本比率・利益率・借入の重さを見比べる
- 販売管理から、直近1年の入金の記録を出し、遅れた回数と日数を数える
- 取引先台帳でいまの格付と与信枠の使い方を確かめる
- 格付の基準表と照らし、変える・変えないを決める。変えるものは理由を書く
- 格下げにするものは営業に事情を聞き、格付の会議の資料にまとめる
(a)比べる相手が「去年のその会社」になる。 2番の見比べは、前期より良くなったか悪くなったかを見る作業です。毎年少しずつ悪くなる取引先は、どの年も「少し悪くなっただけ」に見え、格付が据え置かれます。 気づくのは、入金が止まってからです。
(b)決算と入金を別々に見ている。 決算の数字は表、入金の記録は販売管理にあり、両方を並べて見る手間が1社あたりの時間の半分を占めます。 忙しい月は、決算が届いた取引先は決算だけ、入金が遅れた取引先は入金だけを見て済ませます。
(c)基準表の読み方が担当者ごとに違う。 基準表には「自己資本比率が10%未満で、営業利益が2期連続の赤字ならD」のような条件が並びますが、条件にぴったり当てはまらない会社をどちらに寄せるかは担当者の判断です。 同じ会社でも、担当者が替わると格付が変わります。
(d)理由が書き残されていない。 5番で書く理由は「収益悪化のため」のような一言が多く、翌年に見直すときに、何がどれくらい悪かったから下げたのかが分かりません。
- 【人】 決算書や報告書が届いたら、これまでどおり決算データの表に数字を入れる
- 【自動】 月次の締めの翌営業日に、Pythonのプログラムが決算データの表、販売管理の入金の記録、取引先台帳を取り込む
- 【自動】 その月の対象(決算が届いた取引先と、支払の状況が変わった取引先)を選ぶ
- 【自動】 学習済みのモデルが、取引先ごとに12か月以内に支払の問題が起きる確率を見込む
- 【自動】 確率を格付の区分に当てはめ、いまの格付と比べて「格下げ候補」「格上げ候補」「据え置き」「要確認」に分ける
- 【自動】 確率に効いた項目を上から3つ取り出し、理由の文にして一覧に添える
- 【人】 担当者が「格下げ候補」と「要確認」を開き、営業に事情を聞いて、格付の案を決める
- 【人】 課長が格付の会議で承認し、取引先台帳の格付を直す
- 【自動】 12か月後、見込んだ確率と、実際に支払の問題が起きたかを突き合わせる
7番目が、この設計の分かれ目です。 モデルが出すのは格付の「候補」で、取引先台帳には自動で書き込みません。 モデルは、取引先が大口の受注を取ったことも、社長が替わったことも知りません。営業の話を聞いて候補を覆したときは、その理由を残します。
9番目を省くと、確率が当たっているかが分からないまま使い続けることになります。 確率で格付を決めるなら、「10%と出た取引先のうち、本当に1割前後で問題が起きているか」を毎年確かめる必要があります。
02今回想定するシステム構成
決算データの表(今期・前期の数字、決算月、入手の有無) 販売管理(売上・入金日・遅れた日数・一部入金・売掛金の残高) 取引先台帳(いまの格付・与信枠・支払条件・業種) 信用調査会社の報告書の評点(決算書が無い取引先) │ ▼【トリガー】月次の締めの翌営業日(定時実行) Python(社内のサーバー) ├──▶ その月の対象の選び出し ├──▶ 特徴量の作成(決算の指標・支払の状況・前期からの変化) ▼ Python(scikit-learn の LogisticRegression+CalibratedClassifierCV) │ 12か月以内に支払の問題が起きる確率 ▼ Python ── 確率を格付の区分に当てはめ、いまの格付と比べる ├──▶ 効いた項目の上位3つを理由の文にする ▼ 格下げ候補の一覧(理由・数字の出どころ・データの欠け) ▼ 【人が営業に聞き、格付の案を決める】── 格付の会議で承認 ▼ 12か月後:確率と実際の突き合わせ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python(pandas・scikit-learn の LogisticRegression と CalibratedClassifierCV) | R、Amazon SageMaker、BigQuery ML |
| 保管 | 社内のデータベース(月ごとの確率・候補・覆した理由) | 既存のデータ基盤 |
| 一覧 | 共有フォルダのCSVと、格付の会議の資料のひな形 | 社内のBIツール |
予測の本体は、scikit-learn の LogisticRegression です。 2値の分類で predict_proba が確率を返し、coef_ に項目ごとの係数が入ります。係数と、標準化した項目の値を掛ければ、その取引先の確率に各項目がどれだけ効いたかが足し算で分かります。 勾配ブースティングのほうが当たりは良くなることがありますが、格付の会議で理由を説明できることを優先して、まずはこちらを選びます。
正則化の指定は、scikit-learn 1.8 で書き方が変わっています。 penalty は 1.8 で非推奨になり、1.10 で削除されるとされています。L2 なら l1_ratio=0、強さは C で指定します。 古い記事の penalty='l2' をそのまま写さないでください。
確率の当たり具合は、CalibratedClassifierCV と較正曲線で確かめます。 ロジスティック回帰は、損失に対応したリンク関数を持つため、それだけで較正された確率を返しやすいとされています。ただし保証ではありません。項目の選び方が悪ければ、確率は実際の頻度からずれます。 較正曲線は、確率の帯ごとに実際の割合を並べた図で、対角線に近いほど当たっています。
新しいソフトは足しません。 社内のサーバーで月1回動かし、結果をCSVと会議の資料のひな形に書き出すだけです。取引先台帳と販売管理へは書き込みません。
03どうやって実装するのか
処理の起点を決める
月次の締めで、入金の消込が終わった翌営業日の朝に動かします。 入金の記録が締まる前に動かすと、月末に入った入金が「遅れ」として数えられ、払っている取引先を格下げ候補に挙げてしまいます。 消込の完了は経理の締めの手順に1行足して、ファイルの置き場に完了の印を置く形にします。印が無ければ動かず、翌朝に再び確かめます。
決算が届くたびに動かす形にはしません。 1社ずつ候補を出すと、格付の会議の前に一覧を作り直す手間が残ります。月1回まとめて出し、会議の資料の形で渡します。
例外として、入金が予定日から30日以上遅れた取引先は、その週のうちに単独で出す設定を足せます。会議を待つあいだに出荷を続けてよいかを決めるためで、確率の計算は月次と同じものを使います。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 決算の数字 | 売上高、営業利益、経常利益、当期純利益、純資産、総資産、有利子負債、現預金。今期と前期 | 決算データの表 |
| 決算の入手の状況 | 決算月、届いた日、決算書か報告書か、届かなかった期 | 決算データの表 |
| 入金の記録 | 請求ごとの入金予定日・入金日・遅れた日数、一部入金の有無 | 販売管理 |
| 取引の状況 | 月ごとの売上、売掛金の残高、与信枠の使用率 | 販売管理・取引先台帳 |
| 取引先の属性 | いまの格付、業種、取引の年数、支払条件、支払条件の変更の依頼の記録 | 取引先台帳 |
| 調査会社の評点 | 報告書の評点と、その日付 | 決算データの表 |
| 過去の出来事 | どの取引先で、いつ支払の問題が起きたか | 債権管理の記録 |
質を決めるのは、いちばん下の行です。 モデルは「過去に支払の問題が起きた取引先は、その前の12か月にどういう数字だったか」から学びます。何を「支払の問題」と呼ぶかを先に決めます。 本記事では、60日を超える遅れ、支払条件の変更の依頼(サイトの延長・分割)、法的整理・私的整理の申し出のどれかが起きたことを、問題が起きたと数えます。
「決算の入手の状況」を別に持つのは、決算が来ないこと自体が材料だからです。 毎年届いていた決算書が今年は来ない、届く時期が年々遅くなる、という変化は、数字そのものより先に出ることがあります。
データの取得方法を決める
| 取るもの | どこから | どう取るか |
|---|---|---|
| 決算の数字と入手の状況 | 決算データの表 | 共有フォルダのファイルを読む |
| 入金の記録・売上・残高 | 販売管理 | 月次の締めの後にCSVで書き出す(既存の帳票の書き出しを使う) |
| 格付・与信枠・支払条件 | 取引先台帳 | CSVで書き出す |
| 過去の出来事 | 債権管理の記録 | 学習のときに1回まとめて作り、以後は毎月足す |
販売管理からは、請求ごとの行で取ります。 月ごとの入金額の合計だけでは、「3件の請求のうち1件だけ遅れた」という形が消えます。遅れた日数は、入金予定日と入金日から自分で計算します。 販売管理の画面に出ている「延滞日数」は、締めの時点の数字で、すでに入金された分が消えていることがあります。
取引先の突き合わせは、取引先コードで行います。 決算データの表は社名で入っていることが多いので、最初に取引先コードの列を足すのが準備作業です。 社名で突き合わせると、「株式会社」の前後や支店名で別の会社になり、決算の無い取引先が実際より多く見えます。
学習の材料は、過去5年分の月末ごとの断面で作ります。 各月末の時点で手元にあった数字だけを使い、その後12か月に問題が起きたかを答えにします。その時点でまだ届いていない決算の数字を使わないことが、いちばん大事な点です。 届く前の決算を使って学ぶと、検証では当たっているのに、本番では当たりません。
AIへ渡す前に整形する
- 取引先コードでそろえる … 3つの表を取引先コードでつなぎます。つながらない取引先は一覧の最後に別に出します
- 決算の指標を作る … 自己資本比率(純資産÷総資産)、売上高経常利益率、有利子負債の月商倍率、現預金の月商倍率、売上の前期比、債務超過かどうか
- 支払の状況を数える … 直近3か月と12か月それぞれで、遅れた回数、最大の遅れた日数、一部入金の回数。支払条件の変更の依頼の有無
- 前期からの変化を作る … 自己資本比率と利益率の前期との差。2期分そろわない取引先は、差を空にして「前期なし」の印を立てます
- 欠けを埋めない … 決算書が無い取引先は、決算の指標を平均で埋めず、「決算なし」の印を立てます。平均で埋めると、決算を出さない会社が「平均的な会社」に見えます
- 外れ値を抑える … 利益率や倍率は、売上がごく小さい会社で極端な値になります。上下1%で切りそろえます
- 標準化する … 項目ごとに平均0・ばらつき1にそろえます。標準化の物差しは学習のときのものを保存し、毎月それを使います
5番目を軽く見ないでください。 決算書を出さない取引先は、出す取引先より問題が起きやすいことがあります。「決算なし」の印を項目として入れれば、そのこと自体をモデルが学べます。 埋めてしまうと、その差が消えます。
AIに処理させる
させるのは、取引先ごとに「12か月以内に支払の問題が起きる確率」を見込み、確率に効いた項目を分解することだけです。 格付の区分への当てはめと、候補の分け方は、決められた表で機械的に行います。
| 見るもの | 何を出すか | 判断できないときの扱い |
|---|---|---|
| 決算の指標 | 自己資本比率・利益率・借入の重さが確率をどれだけ上げたか | 決算なし・前期なしは印として扱う |
| 支払の状況 | 遅れた回数と日数、一部入金が確率をどれだけ上げたか | 取引が3か月未満なら 要確認 |
| 前期からの変化 | 悪化の幅が確率をどれだけ上げたか | 2期分そろわなければ空 |
| 確率 | 12か月以内に問題が起きる確率(較正済み) | 学習のときの範囲を大きく外れる項目があれば 要確認 |
格付の区分への当てはめは、財務部が決める表で行います。 例えば、確率が1%未満ならA、1〜3%ならB、3〜8%ならC、8〜20%ならD、20%以上ならE、のような区切りです。区切りの値は、財務部の与信管理規程で決めるもので、モデルが決めるものではありません。 区切りを変えても、モデルを学び直す必要はありません。
| させないこと | 理由 |
|---|---|
| 格付を決める | 与信の枠と取引条件が変わる。格付の会議で人が決める |
| 与信枠・支払条件を変える | 営業との調整と、取引先との交渉が要る |
| 取引先台帳を書き換える | 承認の前に書き換えると、候補が確定した格付として使われる |
| 決算の数字を推し量って埋める | 決算を出さないこと自体が材料。埋めると消える |
| 理由の文を自由に書く | 効いた項目と数字から決まった文で書く。言い回しで重みを変えない |
3行目が、いちばん起きやすい失敗です。 一覧を作るついでに台帳の格付の列を更新すると、営業の画面では翌日から新しい格付で与信枠が計算されます。 会議で覆したときに、元に戻すまでの間に出荷が止まります。
指示内容を固定する
この構成は生成AIを使わないので、プロンプトの代わりに、プログラムに渡す設定ファイルと、理由の文の決まりを示します。
【予測の設定】
target: 12か月以内に支払の問題が起きたか(0/1)
problem_events: 60日を超える遅れ / 支払条件の変更の依頼 / 法的整理・私的整理の申し出
snapshot: 毎月末。その時点で手元にあった数字だけを使う
history: 過去5年分の月末の断面
model: LogisticRegression(l1_ratio=0, C=<交差検証で選ぶ>, max_iter=1000)
class_weight: 指定しない(確率をそのまま使うため)
calibration: CalibratedClassifierCV(method="sigmoid")
※問題が起きた例が1,000件に届かないため sigmoid を使う
【使う項目】
決算: 自己資本比率 / 売上高経常利益率 / 有利子負債の月商倍率 / 現預金の月商倍率 /
売上の前期比 / 債務超過の印 / 決算なしの印 / 前期なしの印 /
自己資本比率の前期との差 / 決算の届いた遅れ(決算月からの月数)
支払: 遅れた回数(3か月・12か月)/ 最大の遅れた日数(3か月・12か月)/
一部入金の回数(12か月)/ 支払条件の変更の依頼の印 / 与信枠の使用率
属性: 業種(大分類)/ 取引の年数
【格付の区分(財務部の与信管理規程で決める)】
A: 確率 < 1% B: 1% 以上 3% 未満 C: 3% 以上 8% 未満
D: 8% 以上 20% 未満 E: 20% 以上
【候補の分け方】
格下げ候補: 確率から決まる格付が、いまの格付より1段以上低い
格上げ候補: 2段以上高く、かつ直近12か月に遅れが無い
要確認: 取引が3か月未満 / 学習の範囲を外れる項目がある / 取引先コードがつながらない
据え置き: 上のどれでもない
【理由の文の決まり】
- 確率を上げた項目のうち、効いた大きさの上位3つを出す
- 文は項目ごとに決めた型で書く。例:
「自己資本比率が {今期}%(前期 {前期}%)に下がった」
「直近3か月で入金が {回数} 回遅れ、最長 {日数} 日だった」
「決算書が届いていない(決算月から {月数} か月)」
- 数字は元の表の値をそのまま入れる。丸めや言い換えをしない
- 「業績が悪化」「信用不安」のような評価の言葉を使わない
class_weight を指定しないのは、確率をそのまま格付に使うためです。 支払の問題が起きる取引先は少ないので、'balanced' を付けたくなります。これはクラスの頻度に反比例した重みで学ぶ指定で、付けると問題の起きる側が重く数えられ、出てくる確率の水準が実際の頻度から離れます。 確率の区切りで格付を決める構成では、区切りの意味が変わってしまいます。
較正に sigmoid を選ぶのは、例の数が少ないためです。 公式の説明では、isotonic は1,000件を超えるくらいのデータがあれば sigmoid と同等以上になる一方、小さなデータでは当てはめすぎやすいとされています。問題が起きた取引先が5年で数百社という規模なら、sigmoid にします。 学習済みのモデルを後から較正するときは、FrozenEstimator で包んで渡し、学習に使っていないデータで較正します。
理由の文を決まった型で書くのは、言い回しで重みを変えないためです。 生成AIに書かせると、同じ数字でも「大きく悪化」と「やや低下」が混ざり、格付の会議で文の強さが議論の中身になってしまいます。 数字を入れた型の文なら、読む人は数字で判断します。
出力形式を固定する
取引先ごとに、次の形のJSONを1行ずつ書き出し、そこから会議の資料の表を作ります。
{
"run_month": "2026-10",
"partner_code": "",
"partner_name": "",
"current_grade": "B",
"probability_12m": 0.094,
"model_grade": "D",
"category": "downgrade_candidate | upgrade_candidate | keep | needs_review",
"reasons": [
{ "feature": "equity_ratio", "contribution": 0.61,
"text": "自己資本比率が 8.2%(前期 14.5%)に下がった",
"source": "決算データの表 2026年6月期" }
],
"data_flags": ["no_prior_period"],
"review_reason": "",
"model_version": "2026-04"
}
reasons には上位3つまでを並べます。contribution は、その項目の係数と標準化した値の積で、確率そのものではなく、確率の対数オッズを押し上げた大きさです。
1つ目の理由は、category と model_grade を分けて持てることです。 model_grade は確率と区切りの表から決まり、category はいまの格付と比べて決まります。区切りの表を変えたときは、確率を計算し直さずに model_grade だけを作り直せます。
2つ目は、source で数字の出どころを示せることです。 担当者が営業に説明するとき、「どの期の決算のどの数字か」を一覧から直接たどれます。決算データの表の入力ミスも、ここで見つかります。 自己資本比率が前期の半分になっている取引先を開いたら、桁を1つ間違えて入れていた、ということが起きます。
3つ目は、model_version で、どのモデルで出した候補かを残せることです。 毎年学び直すと、同じ数字でも確率が変わります。
| 会議の資料の列 | 中身 |
|---|---|
| 取引先 | コード・名称・業種 |
| 格付 | いま → 候補 |
| 確率 | 12か月以内(%。小数1桁) |
| 理由 | 上位3つの文 |
| データの欠け | 決算なし・前期なしなど |
| 営業の話 | 担当者が聞いた内容(人が書く) |
| 結論 | 承認・覆す・保留(人が書く) |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 決算データの表 | ファイルの読み取り | 決算の数字と入手の状況を読む |
| 販売管理 | 月次の締めの後のCSVの書き出し | 請求ごとの入金の記録・売上・残高 |
| 取引先台帳 | CSVの書き出し | 格付・与信枠・支払条件 |
| 社内のデータベース | 書き込み | 月ごとの確率・候補・理由・覆した記録 |
| 共有フォルダ | 書き込み | 会議の資料の表(CSV) |
取引先台帳と販売管理へは書き込みません。 格付の会議で承認された格付は、これまでどおり担当者が台帳に入れます。台帳への入力を自動にしたくなりますが、承認の記録と台帳の値がずれる経路を作らないためです。
営業への連絡も自動にしません。 格下げ候補の一覧がそのまま営業に届くと、承認の前に取引先へ伝わることがあります。担当者が事情を聞くときに、必要な取引先だけを伝えます。
人が確認する
人が開くのは「格下げ候補」と「要確認」だけです。 300件のうち、合わせて3〜4割を想定します。「据え置き」は一覧で件数と確率の分布を流し見ます。
- データの欠けから見る …
data_flagsのある取引先を先に開き、決算データの表の入力漏れや桁の誤りでないかを確かめます - 理由の数字を元の表で確かめる …
sourceの決算と入金の記録を開き、数字が合っているかを見ます - 営業に事情を聞く … 大口の受注、増資、親会社の支援など、数字に出ていない事情を聞きます
- 格付の案を決める … 候補どおりにするか、覆すかを決め、覆すときは理由を
review_reasonに書きます - 格上げ候補は急がない … 格上げは与信枠が増える方向なので、もう1か月様子を見る運用も選べます
4番目の記録を省かないでください。 覆した理由がたまると、モデルが知らない事情の型が見えてきます。「親会社の保証がある取引先を下げすぎる」と分かれば、保証の有無を項目に足せます。
目標は、300件をならして1件4分です。 据え置きは数秒、格下げ候補は営業への聞き取りを含めて10分以上かかります。格下げ候補が月に50件を超えるなら、区切りの表か、モデルの学び直しを疑います。
例外に対処する
| 起きること | 対応 |
|---|---|
| 消込の完了の印が無い | 動かさない。翌朝に再び確かめ、3日続けば担当者に知らせる |
| 取引先コードがつながらない | 要確認 として一覧の最後に出す。決算データの表のコードの入力を直す |
| 決算書が届いていない | 「決算なし」の印で確率を出す。数字を埋めない |
| 決算の数字が前期から極端に変わった | 桁の誤りを疑い、data_flags に印を付けて先に見る |
| 取引が3か月未満 | 支払の状況を数えられないので 要確認。新規の取引先の審査の手順に回す |
| 合併・社名の変更 | 新旧の取引先コードをつなぐ表を台帳の側で持ち、入金の記録を引き継ぐ |
| 項目が学習の範囲を大きく外れる | 確率は出すが 要確認。外れた項目を一覧に書く |
| 販売管理のCSVの列が変わった | 列名を確かめ、合わなければ止めて知らせる。列をずらしたまま読まない |
| 格下げ候補が急に増えた | 入金の記録の締めの遅れや、CSVの欠けをまず疑う |
上から4行目までが大半を占めます。 どれもモデルの問題ではなく、決算データの表の入力と、締めの手順の問題です。 直すほうが、モデルを作り直すより効きます。
記録を残す
- 毎月の入力(3つの表の書き出し)と、そのときの標準化の物差し
- 取引先ごとの確率・格付の候補・理由・データの欠け・モデルの版
- 人が候補を覆した記録 … どの取引先を、どの格付にし、なぜか
- 格付の会議で承認された格付と、台帳に入れた日
- 12か月後の突き合わせ … 確率の帯ごとに、実際に問題が起きた割合
- 学び直しのたびの、較正曲線と検証の数字
1つ目で入力そのものを残すのは、後から「なぜこの月に下げなかったのか」を問われるためです。 支払の問題が起きた取引先について、その前の月の確率と理由をそのまま出せるようにしておきます。
5つ目が、この構成を使い続けてよいかの判断の材料になります。 確率が3〜8%と出た取引先のうち、実際には15%で問題が起きていたなら、確率が低めに出ているということです。格付の区切りを見直すか、学び直します。
04実装レベルの3段階
最小構成では毎月の見直しには使えません。 過去の取引先を見る段階で、確かめるための段階です。 半自動化で、1件12分が7分程度になります。 数字を並べる作業は無くなりますが、確率から格付を考え、理由を書き、会議の資料にまとめる作業が残ります。本格構成で4分になり、この段階が本記事の想定です。 差が大きいのは、理由の文と会議の資料が、1社ずつの手作業だからです。 段階を飛ばさないでください。 半自動化の一覧を3か月見ると、決算データの表のコードの抜けと入力の誤りが先に見つかります。そこを直してから自動にするほうが、要確認の山ができません。
05工数削減シミュレーション
導入後 300件 × 4分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 販売先が数百社から数千社あり、社内格付(A〜Eなど)で与信の枠と支払条件を決めている商社・メーカー・物流会社・建設会社。決算書の数字と、販売管理の入金の記録(入金日・遅れた日数・一部入金)が過去5年分ほど残っていて、どの取引先で支払の問題が起きたかを記録から拾える場合。格付の見直しが担当者の経験に頼っていて、見直しの時期が担当者ごとにずれている場合。
- 販売先が数十社で、全社を毎月担当者が見られる場合。過去に支払の問題が起きた取引先が数件しかなく、確率を学ばせる材料が足りない場合。取引のほとんどが前払か保証付きで、格付を与信の判断に使っていない場合。なお、格付を決める判断と、与信の枠や取引条件を変える判断は、この構成では代替できません。
07最小構成で試す方法
- 過去に支払の問題が起きた取引先を、債権管理の記録から30社選ぶ
- 比べるために、問題が起きなかった取引先を同じ業種から60社選ぶ
- 90社について、問題が起きる前の年の決算の指標と、その年の入金の遅れの回数を表計算に並べる
- 表計算の回帰分析の機能か、Pythonの数行で、問題が起きたかを指標で説明できるかを見る
- 当時の格付と並べ、問題が起きた30社が当時どの格付だったかを確かめる
30社は必ずやってください。 モデルを作り込む前に、「自社の入金の記録と決算の数字に、問題の前触れが出ているのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 入金の遅れと自己資本比率がはっきり効く | 本格的な学習の材料づくりに進む |
| 決算の指標は効くが、入金の遅れが効かない | 入金の記録が月の合計でしか残っていない可能性。請求ごとの記録を取り出せるかが先 |
| どの指標もほとんど効かない | 問題の定義が広すぎるか狭すぎる。何を問題と呼ぶかを決め直す |
3行目が出ても失敗ではありません。 例えば「支払条件の変更の依頼」に、取引先の事務の都合によるものまで含めていれば、前触れは見えません。問題の定義を直してから同じ90社を見直します。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 検証では当たるのに本番で外れる | その時点でまだ届いていない決算を学習に使っている。 届いた日で断面を切る |
| 払っている取引先が候補に挙がる | 消込の前に動かしている。完了の印を待つ |
| 決算を出さない取引先が平均的に見える | 平均で埋めている。「決算なし」の印を項目にする |
| 確率の水準が実際より高い | class_weight='balanced' を付けている。確率を使うなら付けない |
| 較正したら当たりが悪くなった | 例が少ないのに isotonic を使っている。sigmoid にする |
| 古い書き方でエラーや警告が出る | penalty は 1.8 で非推奨。l1_ratio と C で書く |
| 理由の文の強さが議論になる | 生成した文を使っている。数字を入れた型の文にする |
| 社名で突き合わせて決算が無く見える | 取引先コードの列を足す |
| 一覧から台帳の格付が変わっていた | 台帳へは書き込まない。 承認の後に人が入れる |
| 格下げ候補が多すぎて見きれない | 区切りの表が厳しすぎる。財務部で区切りを見直す |
| 覆した理由が残らない | review_reason を必須にする。次の学び直しの材料になる |
| 確率が当たっているか誰も見ていない | 12か月後の突き合わせを、年に1回の会議の議題にする |
上の3行が、この構成の失敗のほとんどです。 どれもモデルではなく、データをいつの時点で、どう並べるかの問題です。 確率の計算を凝るより、断面の作り方を正しくするほうが効きます。
4行目と5行目は、確率で格付を決める構成に特有の失敗です。 当たる・外れるの順位だけを見る用途なら気にしなくてよい設定が、確率の水準をそのまま区切りに当てる用途では効いてきます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 取引先の決算の数字、信用調査会社の報告書の評点、自社への支払の記録、社内格付、与信枠です。どれも取引先との関係に直接ひびく情報で、外に出ると信用の毀損にもつながります。
- 社内のサーバーで動かす … 本記事の構成は生成AIも外部のAPIも使いません。データは社内から出ません。 外部の分析サービスを使う場合も、取引先名をコードに置き換えてから渡します
- 信用調査会社の報告書の使い方を契約で確かめる … 報告書の評点を社内のモデルの材料にしてよいか、契約の利用目的の範囲を先に確かめてください
- 格付は人が決める … モデルが出すのは候補です。格付の会議の承認を経ずに格付が変わる経路を作らないでください
- 候補の段階で外に出さない … 格下げ候補の一覧が営業から取引先に伝わると、それ自体が取引先の資金繰りに影響することがあります。 一覧を見られる人を財務部に限ります
- 理由を説明できる形を保つ … 取引の条件を変えるとき、営業は取引先に理由を説明します。説明できない項目(取引先の所在地だけ、など)は、効いていても項目に入れない判断があります
- 確率の検証を毎年行う … 当たっていない確率で格付を決め続けると、特定の業種や規模の取引先だけが不利に扱われ続けます。 12か月後の突き合わせを、業種ごとにも見てください
誤りが起きた場合のリスクは、問題の起きる取引先を据え置くことと、問題の無い取引先を格下げすることの2つです。 前者は消込の前に動かす・決算を埋めるといった材料の誤りで、後者は確率の水準のずれで起きます。どちらも、人が候補を見て覆せる設計と、覆した記録で抑えます。
10まず何から始めるか
1週目:何を「支払の問題」と呼ぶかを決める
60日を超える遅れ、支払条件の変更の依頼、法的整理・私的整理の申し出のうち、自社ではどれを問題と数えるかを財務部で決めます。 債権管理の記録から、過去5年に問題が起きた取引先の一覧を作ります。
2週目:90社で試す
問題が起きた30社と起きなかった60社について、問題の前の年の決算の指標と入金の遅れを並べ、前触れが出ているかを確かめます。
3週目:取引先コードをそろえる
決算データの表に取引先コードの列を足し、販売管理と取引先台帳とつながるようにします。決算書が届いた日の列も足します。 断面を作るときに要ります。
4週目:格付の区切りの案を作る
確率の何%からをDにするかの案を作り、与信管理規程の改定として課長と相談します。 ここが決まらないうちにモデルを動かすと、確率は出るのに格付に使えない状態になります。
2か月目: 過去5年分の断面でモデルを学び、較正曲線を確かめます。半自動化で毎月の確率の一覧を出し、格付の会議ではこれまでの見直しと並べて見ます。3か月目以降: 締めの翌営業日の自動の実行と、理由の文、会議の資料を足し、1件12分が何分になったかを実測します。1年後に確率と実際の突き合わせを行い、確率の帯ごとの当たり具合を確かめた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
LogisticRegression の predict_proba が確率を返し、2値の分類で coef_ が項目ごとの係数を持つこと。penalty が 1.8 で非推奨になり 1.10 で削除予定で、l1_ratio と C で指定すること。class_weight='balanced' がクラスの頻度に反比例した重みを付けること。既定の solver が lbfgs であること | scikit-learn: LogisticRegression | 2026-10-26 |
較正曲線が確率の帯ごとに実際の割合を並べたものであること。CalibratedClassifierCV の sigmoid と isotonic の違いと、isotonic がおおむね1,000件を超えるデータで sigmoid と同等以上になり、小さなデータでは当てはめすぎやすいこと。学習済みのモデルを FrozenEstimator で包んで較正すること。ロジスティック回帰がそれだけで較正された確率を返しやすいが保証ではないこと | scikit-learn: Probability calibration | 2026-10-26 |
格付の区切りと、何を支払の問題と呼ぶかは、自社の与信管理規程として財務部で決めてください。 本記事の区切りの値は例です。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1802)についてのご相談はこちらから。
