第一生命 — AI引受審査で審査期間を5日→1日(80%削減)、NLP医療文書解析で営業職員のAI活用率向上
企業概要
- 社名: 第一生命保険株式会社
- グループ: 第一生命ホールディングス傘下
- 事業: 生命保険(定期・終身・医療・がん保険等)
- 規模: 国内生保業界大手、保有契約高は業界トップクラス
- 営業体制: 全国約4万人の営業職員(「ライフプランナー」)
- AI推進方針: 「デジタルと人の力を組み合わせ、顧客一人ひとりに最適な保険を提供」
背景と課題
課題1: 引受審査のボトルネック
生命保険の加入審査(引受審査)では、顧客の健康状態・病歴を記載した医療文書を審査担当者が精読・判断する。
- 人手による医療文書解析の限界: 専門用語が多く、審査担当者のトレーニングに時間がかかる
- 審査期間の長さ: 複雑な案件は平均5日以上かかり、顧客・営業職員の不満要因に
- 審査品質のばらつき: 担当者の経験・知識差により判断結果が一致しないケースがある
- 増加する申込件数: 営業力強化に伴い申込件数が増加しても、審査部門の増員は困難
課題2: 営業職員の提案品質格差
約4万人の営業職員の保険知識・提案スキルには大きな個人差があり、
- 新人・中堅職員が複雑な医療保険・投資型保険の提案を適切に行うのが困難
- 顧客の状況に合わせた最適なプラン選択に時間がかかる
- ベテラン職員のノウハウが組織に共有されていない
導入したシステム・AI
① NLP医療文書解析エンジン
自然言語処理(NLP)を用いて、健康告知書・診断書の医療テキストを自動解析。
- 技術: 日本語医療特化型NLPモデル(BERT系のファインチューニング)
- 処理内容: 病名・治療歴・投薬情報を構造化データに変換
- ICD-10対応: 病名を国際疾病分類コードに自動マッピング
- 出力: 疾患リスト・治療状況・現在の健康状態サマリー
② AIリスクスコアリングモデル
NLPで抽出した医療情報と契約希望情報をもとに、引受リスクを定量スコア化。
- 技術: 機械学習(Gradient Boosting + ロジスティック回帰アンサンブル)
- 学習データ: 過去数百万件の引受審査事例と引受結果
- 出力: 引受可否スコア・特別条件提案(部位不担保・保険料割増等)・審査担当者へのコメント
- 自動化範囲: 標準リスク案件の約60%を自動承認、残り40%は審査担当者がAI支援付きでレビュー
③ 営業職員向けAIアシスタント
タブレット端末で使える営業職員向けのAI相談支援システム。
- 機能: 顧客プロフィール入力 → 最適な保険プランをAIが推薦・説明
- 根拠提示: 推薦理由を自然言語で説明(「〇〇さんの年齢・家族構成・収入を考慮すると...」)
- シミュレーション: 保険料・保障額のシミュレーションをリアルタイムで計算
- FAQ対応: 複雑な保険の仕組みをAIが平易な言葉で説明
成果
| 指標 | 導入前 | 導入後 |
|---|---|---|
| 引受審査平均期間 | 5日 | 1日(80%削減) |
| 標準案件の自動承認率 | 0% | 約60% |
| 審査担当者1人あたり処理件数 | ベースライン | 大幅向上 |
| 営業職員のAIアシスタント活用率 | — | 向上(全国展開) |
| 新人職員の提案品質 | 経験者と大きな差 | 格差縮小 |
実装方法
引受審査AIのシステムアーキテクチャ
- 入力層: 顧客が記入した健康告知書・医療機関の診断書をOCRでデジタル化(手書き対応含む)
- NLP処理層: 医療特化NLPモデルが病名・治療歴・投薬情報を抽出・構造化
- リスク評価層: 抽出情報 + 契約希望情報(保険種類・保障額・年齢等)をMLモデルに投入
- 意思決定層: スコアに応じて自動承認 / 条件付き提案 / 人間審査エスカレーションを振り分け
- フィードバック層: 審査担当者の最終判断をモデルに定期的にフィードバックして精度改善
品質・コンプライアンス管理
- 説明可能性(XAI): SHAP値でAIの判断根拠を可視化し、審査担当者・顧客への説明責任を担保
- 規制対応: 保険業法・個人情報保護法に準拠したデータ管理・監査ログの整備
- バイアス監査: 年齢・性別・職業等の属性による不当な差別がないか定期的に統計検証
- ヒューマンオーバーサイト: 全自動承認案件も週次サンプリング監査で品質担保
営業AIアシスタントの設計
- クラウドベースのAPIとして実装し、全国の営業職員タブレットからオフライン対応も可能
- 顧客データは端末に保存せず、全てサーバーサイドで処理(情報漏洩防止)
- 推薦結果はログ保存し、コンプライアンス監査・適合性原則の記録として活用
自前で実装するなら(参考コード)
OpenAI APIを使った保険引受審査支援システムの参考実装です。医療文書のNLP解析とリスクスコアリングを組み合わせたアプローチを示します。
import json
from openai import OpenAI
from sklearn.ensemble import GradientBoostingClassifier
import numpy as np
client = OpenAI()
# ─── Stage 1: 医療文書NLP解析 ───
def extract_medical_info(medical_text: str) -> dict:
"""
健康告知書・診断書テキストから医療情報を構造化データとして抽出する
"""
response = client.chat.completions.create(
model="gpt-4o",
response_format={"type": "json_object"},
messages=[
{
"role": "system",
"content": (
"あなたは生命保険の引受審査を支援する医療情報解析AIです。\n"
"提供された健康告知書・診断書テキストを解析し、以下のJSON形式で出力してください:\n"
"{\n"
' "diagnosed_conditions": [\n'
' {"disease_name": "病名", "icd10_code": "ICD-10コード", '
'"severity": "mild/moderate/severe", "treatment_status": "治療中/治療完了/経過観察"}\n'
" ],\n"
' "current_medications": ["現在服用中の薬のリスト"],\n'
' "surgery_history": ["手術歴リスト(年・術式)"],\n'
' "lifestyle_risks": ["喫煙/飲酒/肥満等のリスク因子"],\n'
' "underwriting_concerns": ["引受審査で特に注意すべき点"],\n'
' "overall_health_summary": "健康状態の総合サマリー(1-2文)"\n'
"}"
)
},
{
"role": "user",
"content": f"以下の健康告知書を解析してください:\n\n{medical_text}"
}
]
)
return json.loads(response.choices[0].message.content)
# ─── Stage 2: 機械学習によるリスクスコアリング ───
def build_underwriting_model(training_cases: list[dict]) -> GradientBoostingClassifier:
"""
過去の引受審査事例でリスクスコアリングモデルを学習
"""
# 特徴量エンジニアリング(医療情報 + 申込情報)
X = np.array([
[
case["age"],
case["num_conditions"], # 既往症数
case["has_chronic_disease"], # 慢性疾患の有無 (0/1)
case["max_severity_score"], # 最重症疾患の重症度 (1-3)
case["years_since_last_treatment"],
case["bmi"],
case["is_smoker"],
]
for case in training_cases
])
y = np.array([case["accepted"] for case in training_cases]) # 1=引受可, 0=引受不可
model = GradientBoostingClassifier(n_estimators=300, max_depth=4, random_state=42)
model.fit(X, y)
return model
def score_applicant(medical_info: dict, applicant: dict, model) -> dict:
"""
NLP解析結果 + 申込者情報でリスクスコアを算出
"""
conditions = medical_info.get("diagnosed_conditions", [])
severity_map = {"mild": 1, "moderate": 2, "severe": 3}
max_severity = max([severity_map.get(c.get("severity", "mild"), 1) for c in conditions], default=0)
features = np.array([[
applicant["age"],
len(conditions),
1 if any(c.get("treatment_status") == "治療中" for c in conditions) else 0,
max_severity,
applicant.get("years_since_last_treatment", 10),
applicant.get("bmi", 22.0),
1 if "喫煙" in medical_info.get("lifestyle_risks", []) else 0,
]])
accept_prob = model.predict_proba(features)[0][1]
if accept_prob >= 0.85:
decision = "自動承認"
condition = "標準条件"
elif accept_prob >= 0.60:
decision = "条件付き承認候補"
condition = "部位不担保または保険料割増の可能性あり"
else:
decision = "審査担当者エスカレーション"
condition = "詳細審査が必要"
return {
"accept_probability": round(accept_prob, 3),
"decision": decision,
"condition": condition,
"requires_human_review": accept_prob < 0.85,
"underwriting_notes": medical_info.get("underwriting_concerns", []),
}
# ─── 使用例 ───
medical_document = """
健康告知書
既往症: 2型糖尿病(2019年診断、現在インスリン治療中)
血圧: 135/85(高血圧傾向、降圧剤服用中)
手術歴: なし
身長172cm、体重78kg(BMI 26.4)
喫煙: なし、飲酒: 週2回程度
直近の健康診断: 2024年3月(血糖値HbA1c 7.2%)
"""
# Step 1: 医療文書解析
medical_info = extract_medical_info(medical_document)
print("解析結果:")
print(f" 診断病名: {[c['disease_name'] for c in medical_info['diagnosed_conditions']]}")
print(f" 引受懸念点: {medical_info['underwriting_concerns']}")
# Step 2: モデルは実際には数十万件のデータで訓練(ここではダミーデータ)
dummy_training = [
{"age": 45, "num_conditions": 1, "has_chronic_disease": 1, "max_severity_score": 2,
"years_since_last_treatment": 0, "bmi": 26.0, "is_smoker": 0, "accepted": 0},
{"age": 35, "num_conditions": 0, "has_chronic_disease": 0, "max_severity_score": 0,
"years_since_last_treatment": 10, "bmi": 22.0, "is_smoker": 0, "accepted": 1},
]
model = build_underwriting_model(dummy_training)
# Step 3: リスクスコアリング
result = score_applicant(
medical_info,
applicant={"age": 52, "bmi": 26.4, "years_since_last_treatment": 0},
model=model
)
print(f"\n引受判定: {result['decision']}")
print(f"承認確率: {result['accept_probability']:.1%}")
print(f"条件: {result['condition']}")
アーキテクチャのポイント: NLPによる非構造化医療文書の構造化(Stage1)と機械学習によるリスクスコアリング(Stage2)を分離することで、各コンポーネントを独立して改善できます。SHAP値でAIの判断根拠を説明可能にすることが、保険業法上の適合性原則対応にも重要です。