ECの注文ごとに、商品・サイズ・購入履歴・レビューから返品されるおそれを見込み、サイズの確認メールや商品ページの記載見直しの候補を出す
注文が入るたびに、サイズ違いで返品されるおそれを確率で見込み、出荷の前にサイズの確認メールを送る候補を出します。月に1回、見込みと実績の返品率が高い商品を並べ、ページのサイズの記載を見直す候補にします。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Python
- 対象業界
- EC/小売
- 対象部門
- カスタマーサポート/物流
- 対象業務
- 内容確認・チェック/集計・分析
- 主な課題
- データ分析に時間がかかる/人手が足りない/判断に時間がかかる
- AIで行う処理
- 予測
- 主な効果
- 判断支援/工数削減/機会損失防止
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 毎日の出荷の締めの2時間前に、担当者がカートシステムの注文一覧を開く
- 目安に当たる注文(同じ商品の複数サイズ、返品の多い会員、初めての靴など)を拾う
- 拾った注文の会員の過去の購入と返品を開き、同じ種類の商品で選んだサイズを見る
- 商品ページのサイズ表とレビューを開き、「小さめ」「大きめ」の声があるかを見る
- 確かめたほうがよいと判断した注文に、確認のメールを書いて送り、出荷を保留にする
- 返事が来たら、サイズを変えるか、そのまま出荷するかを処理する
- 月末に、返品の多かった商品を表で数え、商品の担当者へ伝える
- 自動30分ごとに、カートシステムから新しい注文を取り込む
- 自動注文の明細ごとに、会員の同じ種類の商品の購入と返品の履歴、商品の情報、レビューのサイズの傾向を並べる
- 自動勾配ブースティングのモデルが、明細ごとにサイズ違いで返品されるおそれを確率で出す(過去の実績に合わせて補正した値)
- 自動確率が線を超えた明細について、理由の候補(いつもと違うサイズ、同じ商品の複数サイズ、レビューで小さめの声が多い、など)を付ける
- 自動Claude API が、理由の候補とサイズ表から、確認メールの下書きを作る
- 人担当者が、確認の候補を確率の高い順に見て、メールを送るかを決め、下書きを直して送る
- 自動月に1回、商品ごとに見込みの返品率と実績の返品率を並べ、ページの記載を見直す候補の一覧を作る
- 人商品の担当者が一覧を見て、サイズ表の書き方や、レビューの声をページに反映するかを決める
各工程の詳しい説明を読む
- 毎日の出荷の締めの2時間前に、担当者がカートシステムの注文一覧を開く
- 目安に当たる注文(同じ商品の複数サイズ、返品の多い会員、初めての靴など)を拾う
- 拾った注文の会員の過去の購入と返品を開き、同じ種類の商品で選んだサイズを見る
- 商品ページのサイズ表とレビューを開き、「小さめ」「大きめ」の声があるかを見る
- 確かめたほうがよいと判断した注文に、確認のメールを書いて送り、出荷を保留にする
- 返事が来たら、サイズを変えるか、そのまま出荷するかを処理する
- 月末に、返品の多かった商品を表で数え、商品の担当者へ伝える
(a)拾うのに時間がかかる。 1日に500件ほどの注文から目安に当たるものを探し、1件ずつ会員の履歴を開きます。1件6分で、月600件を確認しています。 出荷の締めが迫ると、確認しきれない注文がそのまま出ていきます。
(b)拾い方が人に頼っている。 目安は担当者の頭の中にあり、文書になっていません。どの目安に当たった注文が実際に返品されたのかを、誰も数えていません。 効いていない目安で拾い続けているかもしれません。
(c)確認メールを送った後の結果が分からない。 メールを送った注文が返品されなかったのは、メールのおかげなのか、もともと返品されない注文だったのかが分かりません。送る意味のある注文に絞れているかを、確かめる方法がありません。
(d)商品ページの問題に気づくのが遅い。 返品の多い商品は月末に数えますが、その商品を買った会員の多くが、いつもと違うサイズを選んでいたのか、いつものサイズで合わなかったのかまでは見ていません。後者ならページのサイズの記載が実物と合っていないおそれがあり、早く直すほど返品が減ります。
- 【自動】 30分ごとに、カートシステムから新しい注文を取り込む
- 【自動】 注文の明細ごとに、会員の同じ種類の商品の購入と返品の履歴、商品の情報、レビューのサイズの傾向を並べる
- 【自動】 勾配ブースティングのモデルが、明細ごとにサイズ違いで返品されるおそれを確率で出す(過去の実績に合わせて補正した値)
- 【自動】 確率が線を超えた明細について、理由の候補(いつもと違うサイズ、同じ商品の複数サイズ、レビューで小さめの声が多い、など)を付ける
- 【自動】 Claude API が、理由の候補とサイズ表から、確認メールの下書きを作る
- 【人】 担当者が、確認の候補を確率の高い順に見て、メールを送るかを決め、下書きを直して送る
- 【自動】 月に1回、商品ごとに見込みの返品率と実績の返品率を並べ、ページの記載を見直す候補の一覧を作る
- 【人】 商品の担当者が一覧を見て、サイズ表の書き方や、レビューの声をページに反映するかを決める
6番目が、この設計の分かれ目です。 確率が高くても、会員が贈り物として別のサイズを選んでいることがあります。注文の備考や、ギフトの設定を見て、担当者が送るかを決めます。送らない判断も記録に残します。
4番目で理由の候補を付けるのは、担当者がメールの文面を選べるようにするためです。 「いつもと違うサイズ」なのか「この商品は小さめの声が多い」なのかで、伝える内容が変わります。
02今回想定するシステム構成
カートシステム(注文・会員) 返品の受付の表(理由の区分) 商品のマスタ(サイズ表) │ │ │ ▼【トリガー】30分ごとの新しい注文の取り込み Python ├──▶ 会員の同じ種類の商品の購入・返品の履歴 ├──▶ レビューのサイズの傾向(月1回 Claude API で区分した結果) ▼ HistGradientBoostingClassifier + CalibratedClassifierCV │ 明細ごとのサイズ違いの返品の確率(補正済み) ▼ 線を超えた明細 ── 理由の候補を付ける ▼ Claude API ── 確認メールの下書き(サイズ表と理由の候補だけを使う) ▼ 【担当者が送るかを決めて送る】 ▼ 月1回:商品ごとの見込みと実績の返品率 → 商品ページの見直し候補
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python(pandas・scikit-learn の HistGradientBoostingClassifier、CalibratedClassifierCV、TimeSeriesSplit) | R、BigQuery ML |
| 生成AI | Claude API(レビューのサイズの声の区分と、確認メールの下書き) | OpenAI API、Gemini API |
| データの取得元 | カートシステムの注文・会員のCSV出力、返品の受付の表、商品のマスタ | カートシステムのAPI |
| 結果の出力先 | カスタマーサポートの確認の一覧、商品の担当者への月次の一覧 | カートシステムの注文のメモ欄 |
カートシステムには、注文の保留以外を書き込みません。 保留も担当者がメールを送ると決めた注文だけです。確率が高いというだけで、注文を自動で止めたり、取り消したりしません。
生成AIに渡すのは、商品の情報と理由の候補だけです。 会員の名前、住所、購入の履歴そのものは渡しません。下書きの宛名や注文番号は、送る段階でカートシステムの側が差し込みます。
03どうやって実装するのか
処理の起点を決める
30分ごとに、新しい注文を取り込んで見込みます。 出荷の締めは毎日15時で、確認のメールはその前に送る必要があります。1日1回の夜の処理だと、午前の注文の確認が締めに間に合いません。 30分ごとなら、担当者は確認の一覧を上から見ていくだけで済みます。
商品ページの見直しの一覧は、月の第1営業日に作ります。 返品は届いてから数週間かけて戻ってくるため、注文から30日を過ぎた注文だけで実績の返品率を数えます。 先月の注文ではなく、先々月の注文の実績が確定した時点で並べます。
モデルの学び直しは、月に1回にします。 新しい商品が毎週入る事業者では、半年に1回では新しい商品の傾向が入りません。学び直しの前後で確率の分布が大きく変わっていないかを確かめてから、入れ替えます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 注文の明細 | 注文番号、会員番号、注文日時、商品コード、色、サイズ、数量、ギフトの設定、備考の有無 | カートシステム |
| 会員の履歴 | 同じ種類の商品で過去に選んだサイズ、返品・交換した明細と理由の区分 | カートシステムと返品の受付の表 |
| 商品の情報 | 商品の種類、ブランド、サイズ表の有無、実寸の記載の有無、発売からの日数 | 商品のマスタ |
| レビューのサイズの傾向 | 商品ごとの「小さめ」「ちょうど」「大きめ」の声の割合 | レビューを Claude API で区分した結果 |
| 返品の実績 | 注文から30日以内に、サイズが合わない理由で返品・交換された明細か | 返品の受付の表 |
質を決めるのは、いちばん下の返品の理由の区分です。 モデルが学ぶのは「サイズが合わない理由で戻ってきた明細」です。理由が「その他」でまとめられていると、イメージ違いや不良の返品まで学んでしまい、サイズの確認メールでは減らせない返品を見込むことになります。 返品の受付で、理由の区分を必ず選ぶ運用にします。
会員の履歴は、同じ種類の商品に絞ります。 ワンピースのサイズと靴のサイズは関係しません。「パンプスでいつも23.5を選ぶ会員が、24.0を選んだ」が見たいことです。
データの取得方法を決める
注文と会員は、カートシステムの注文の書き出しか API で取ります。取り込むのは前回の取り込みより後の注文だけにし、注文番号で重複を除きます。 会員の履歴は毎晩まとめて作り直し、日中は前の晩の履歴を使います。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 新しい注文の明細 | カートシステム(30分ごと) | 見込む対象 |
| 会員ごとの種類別のサイズの履歴 | カートシステムと返品の受付の表(毎晩) | いつもと違うサイズかの特徴 |
| 商品のマスタ | 商品のマスタ(毎晩) | 商品の特徴、サイズ表 |
| レビューの本文 | レビューの書き出し(月1回) | サイズの声の区分 |
| 返品の実績 | 返品の受付の表(毎晩) | 学習の答え、見込みの振り返り |
レビューのサイズの声は、月に1回 Claude API で区分します。 「普段Mですが少しきつめでした」「ゆったりしています」のような書き方はさまざまで、言葉の一覧で拾うと取りこぼします。区分の結果は商品ごとの割合にしてから特徴に入れます。 レビューの本文そのものはモデルに入れません。
区分の結果も構造化出力で受け取り、1件ごとに「区分」と「根拠にした一文」を返させます。 根拠の一文があれば、商品の担当者が月次の一覧を見たときに、どんな言い方で小さめと書かれているかをすぐ読めます。区分に迷うレビューは「言及なし」にさせ、割合の計算から外します。
AIへ渡す前に整形する
- 答えの作り方 … 注文から30日以内に、サイズが合わない理由で返品・交換された明細を1、それ以外を0にします
- 答えの確定していない注文を外す … 注文から30日が過ぎていない明細は、学習にも検証にも使いません
- 同じ商品の複数サイズの印 … 同じ注文で、同じ商品を2つ以上のサイズで買った明細に印を付けます
- いつもと違うサイズの特徴 … 会員が同じ種類の商品で最も多く選んだサイズとの差を、段の数で入れます。履歴の無い会員は空のままにします
- 商品の特徴 … 種類とブランドはカテゴリの特徴にし、レビューのサイズの声の割合と、レビューの件数を入れます
- 特殊な期間の印 … セールの初日、送料無料の期間、返品の条件を変えた時期に印を付けます
2番目の「答えの確定していない注文を外す」を軽く見ないでください。 先週の注文は、まだ返品が戻ってきていません。学習に入れると、最近の注文ほど返品されないとモデルが学び、新しい商品の確率が低く出ます。
4番目で「履歴の無い会員を空のままにする」のは、初めての会員を「いつものサイズ」として扱わないためです。 0で埋めると、いつもと同じサイズを選んだ会員と区別できません。
学習と検証は、時間の順で分けます。 scikit-learn の TimeSeriesSplit は、未来のデータで学習して過去を評価しないための分け方です。gap には30日分の注文を入れ、答えが確定していない期間をはさみます。
AIに処理させる
この構成の「AI」は3つに分かれます。 確率を出すのは Python の勾配ブースティングで、確率の補正も Python が行います。生成AIには、レビューの区分と、確認メールの下書きだけをさせます。
| 段 | させること | させないこと |
|---|---|---|
| 勾配ブースティング | 明細ごとのサイズ違いの返品の確率 | 不良やイメージ違いの返品の見込み |
| 確率の補正 | 出した値を過去の実績に合わせる | 線の引き方の決定 |
| Claude API(月1回) | レビューのサイズの声を「小さめ」「ちょうど」「大きめ」「言及なし」に区分 | 商品の評価、レビューの要約の公開 |
| Claude API(随時) | 理由の候補とサイズ表からの確認メールの下書き | 送るかの判断、返品の条件の説明 |
確率には、scikit-learn の HistGradientBoostingClassifier を使います。 欠けた値(NaN)をそのまま扱え、データフレームのカテゴリ型の列をカテゴリの特徴として扱えます。履歴の無い会員の「いつもとの差」を空のまま入れられるのは、このためです。 返品の明細は全体の一部なので、class_weight を balanced にして少ないほうの明細を重く見ることもできます。
そのうえで、CalibratedClassifierCV で確率を補正します。 class_weight で重みを変えると、出てくる値は実際の返品の割合より高めにずれます。補正の方法は sigmoid(既定)と isotonic などがあり、isotonic は補正に使う明細が1,000件よりずっと少ないと過学習するとされています。月15,000件の注文があれば isotonic も選べますが、新しい種類の商品では件数が足りないので、sigmoid から始めます。
| 生成AIにさせないこと | 理由 |
|---|---|
| 確率の言い換えや計算 | 数字は Python の表が正 |
| 「返品されそうです」と会員に伝える文面 | 会員を疑う文面は関係を損なう |
| 返品の条件や送料の説明 | 条件はページの記載が正。下書きに書くと食い違う |
| サイズ表に無い実寸の推測 | 記載の無い寸法を足さない |
線の引き方は、確率だけでなく、担当者が1日に確かめられる件数で決めます。 1日の注文が500件で、担当者が出荷の締めまでに確かめられるのが30件なら、確率の高い順に30件目あたりの値が、その日の線の目安になります。 線を低くしすぎると、一覧が長くなって上から見きれず、確率の高い明細まで見落とします。補正した確率なら、「線を0.25にすると1日に何件が候補になり、そのうち何件くらいがサイズで返品されてきたか」を過去の記録で数えられます。
2行目がいちばん起きやすい失敗です。 理由の候補をそのまま渡すと、生成AIは「返品の可能性が高いため」と書きます。確認メールの目的はサイズの案内で、会員に返品の見込みを伝えることではありません。
指示内容を固定する
あなたはECサイトのカスタマーサポートで、出荷の前にサイズの確認をお願いする
メールの下書きを作る立場です。下書きは担当者が直してから送ります。
【作るもの】
1. 件名(30字程度)
2. 本文:選ばれたサイズの確認のお願いと、商品のサイズ表の該当する行の案内
3. サイズを変えたい場合の返信の仕方(返信の期限は {reply_deadline} と書く)
【理由の候補の使い方】
- different_from_usual:同じ種類の商品で、以前に選ばれたサイズと違うことを、
「以前ご購入の○○ではMサイズをお選びでした」のように事実だけで書く
- multiple_sizes:同じ商品を複数のサイズでご注文であることを書き、
意図どおりかを確かめる
- review_runs_small / review_runs_large:「お客様のレビューでは小さめ(大きめ)
との声が多い商品です」と書く。割合の数字は書かない
【厳守事項】
- 「返品」「返品の可能性」「返品率」という語を本文に書かないでください。
- 会員の購入の傾向を評価したり、注意したりする書き方をしないでください。
- サイズ表に無い寸法や、着用の感想を書き足さないでください。
- 返品・交換の条件、送料、返金について書かないでください。
- 理由の候補に無いことを理由として書かないでください。
- 情報が足りないときは missing_info に項目名を入れ、推測で補わないでください。
【商品】{item_name}({color}/{size})
【サイズ表の該当する行と、前後のサイズの行】{size_chart_rows}
【理由の候補】{reasons}
【以前に選ばれた同じ種類の商品のサイズ】{usual_size}
「返品という語を書かない」を明記しないと、ほぼ必ず入ります。 理由の候補が返品の見込みから来ていることを、生成AIは文脈から読み取ります。会員から見れば、返品しそうだと思われている、と受け取れる文面になります。
「返品・交換の条件を書かない」も同じ理由で外せません。 下書きに条件を書くと、ページの記載が変わったときに食い違い、メールに書いた条件で返品を求められることになります。
出力形式を固定する
明細ごとの見込みと、確認メールの下書きを、次の形のJSONで持ちます。 下書きの部分は Claude API の構造化出力(output_config.format に type: "json_schema" を指定)で、この形に固定します。
{
"order_no": "",
"line_no": 1,
"item_code": "",
"size": "",
"model_version": "2026-10",
"return_prob": 0.0,
"threshold": 0.0,
"reasons": ["different_from_usual", "multiple_sizes", "review_runs_small"],
"mail_draft": { "subject": "", "body": "", "missing_info": [] },
"agent_action": { "sent": false, "reason_if_not_sent": "" },
"outcome": { "size_changed": false, "returned_for_size": null }
}
return_prob threshold reasons は Python が、mail_draft は Claude API が、agent_action は担当者が埋めます。outcome は、注文から30日が過ぎた後に Python が返品の受付の表から埋めます。
1つ目の理由は、確率と文章を別の層に置けることです。 生成AIの出力に確率の欄は無く、生成AIが数字を書き換える経路がありません。 構造化出力では文字数の制約(minLength/maxLength)が使えず、additionalProperties は false にする必要があるため、件名の長さや禁じた語が入っていないかは、受け取った後に Python で確かめます。
2つ目は、agent_action と outcome で、メールの効き目を後から数えられることです。 送った明細と送らなかった明細で、サイズを変えた割合と返品された割合を比べれば、第3章の(c)の「送る意味があったのか」に答えが出ます。
3つ目は、threshold をその時点の値で残せることです。 線を引き直した後でも、当時どの線で候補にしたかが分かります。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| カートシステム | 注文の書き出しまたはAPI(読み取り) | 注文の明細、会員の購入の履歴 |
| カートシステム | 担当者の操作 | 送ると決めた注文の保留、メールの送信 |
| 返品の受付の表 | 毎晩の読み取り | 返品の理由の区分と日付 |
| 商品のマスタ | 毎晩の読み取り | 種類、ブランド、サイズ表 |
| Claude API | API呼び出し | レビューの区分(月1回)、確認メールの下書き(随時) |
| 確認の一覧 | 共有の表への書き込み | 確率の高い順の明細と下書き |
メールの送信は、カートシステムの通常の画面から担当者が行います。 この構成から直接メールを送る経路は作りません。送信の記録がカートシステムに残り、問い合わせが来たときに誰でも経緯を追えるようにするためです。
人が確認する
担当者は、確認の一覧を確率の高い順に見ます。
- 備考とギフトの設定を見る … 贈り物や、家族の分をまとめて買った注文は、いつもと違うサイズで当然です。送らないと決め、理由を残します
- 理由の候補と下書きを照らす … 下書きが理由の候補どおりの内容か、サイズ表の行が正しいかを見ます
- 送るかを決める … 送る場合は注文を保留にし、返信の期限を書きます
- 返信を処理する … サイズを変えるか、そのまま出荷するかを処理し、
outcomeの元になる記録を残します
同じ会員に、短い間に何度も確認メールを送らないようにします。 同じ月にすでに確認メールを送った会員の明細は、一覧で印を付けて出し、2通目を送るかは担当者が決めます。 何度も届くと、会員は自分の選び方を責められているように感じます。
1番目を省かないでください。 ギフトの注文に「以前はMサイズをお選びでした」と送ると、会員にとっては余計なお世話で、次の注文が遠のきます。
目標は、600件をならして1件2分です。 確率が線をわずかに超えた明細は一覧で流し見て1分足らず、下書きを直して送る明細は3〜4分かかります。
例外に対処する
| 起きること | 対応 |
|---|---|
| カートシステムから注文が取れない | 前回の取り込みの時刻を一覧の冒頭に書き、担当者は従来の目安で拾う |
| サイズの無い商品の明細 | 見込みの対象から外す |
| 新しい商品でレビューが無い | レビューの特徴を空のまま見込む。理由の候補に review を出さない |
| サイズ表がマスタに無い商品 | 下書きを作らず、missing_info に「サイズ表」と入れて担当者へ |
| 出荷の締めまで30分を切った注文 | 一覧の先頭に出し、送らない判断も含めて担当者が決める |
| 返信の期限までに返事が無い | 注文どおりのサイズで出荷する。勝手にサイズを変えない |
| Claude API が応答しない | 確率と理由の候補だけを一覧に出し、担当者が定型の文面で送る |
| 確率の分布が学び直しで大きく変わった | 入れ替えずに前の版を使い、担当者に知らせる |
上から3行目と6行目は、運用の最初から決めておきます。 返事の無い注文の扱いを決めていないと、保留のまま締めを過ぎ、確認したせいで届くのが遅れることになります。
記録を残す
- 取り込んだ注文の明細と、見込みに使った特徴(会員番号は仮の番号に置き換える)
- モデルの版、補正の方法、線の値(
threshold) - 明細ごとの確率と理由の候補、生成AIの下書き
- 担当者が送ったか、送らなかった理由(
agent_action) - 30日後の結果(サイズを変えたか、サイズの理由で返品されたか)
- 月次の商品ごとの見込みと実績の返品率、商品の担当者が直したページの記録
5行目と6行目は、線の引き直しに使います。 送った明細で返品が減っていなければ、メールでは防げない返品を拾っているということです。線を上げるか、理由の候補の出し方を見直します。
04実装レベルの3段階
半自動化だけでも、①と②の大半は消えます。 会員の履歴を開いて見比べる作業が、印として最初から付くからです。ただし、どこまでを確認するかの線は、まだ担当者の目安です。 本格構成で1件2分になり、この段階が本記事の想定です。 違いは、確率で線が引け、送った結果が数えられることです。 段階を飛ばさないでください。 半自動化で数か月、印の付いた明細と返品を並べると、どの印が効いて、どの印が効かないかが分かります。効かない印を外してからモデルを作るほうが、理由の候補が担当者に信用されます。
05工数削減シミュレーション
導入後 600件 × 2分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 衣料品・靴・下着など、サイズが合わないことによる返品・交換が多いECの事業者。カスタマーサポートが、同じ商品を複数のサイズで買った注文や、返品の多い会員の注文を、出荷の前に目で拾ってサイズの確認メールを送っている場合。返品の理由を区分して記録しており、注文と返品を注文番号で結び付けられる場合。月に数千件以上の注文があり、過去1年以上の注文と返品の記録がある場合。
- 返品の理由を記録しておらず、サイズ違いと不良・イメージ違いの返品を分けられない事業者。サイズの無い商品(雑貨・食品など)が中心の場合。注文が月に数百件で、目で見て足りる場合。なお、返品を受け付けるかどうかの判断、返品の条件の変更、特定の会員の注文を断る判断は、この構成では代替できません。
07最小構成で試す方法
- 返品の多いブランドの靴を1つ選び、過去1年分の注文の明細と、サイズの理由の返品を書き出す
- 表計算で、会員ごとに同じ種類の靴で以前に選んだサイズを並べ、今回のサイズとの差を出す
- 「差がある明細」「同じ商品の複数サイズ」「差が無い明細」に分け、それぞれの返品の割合を数える
- 手元のAIサービスに、その商品のレビューを20件ほど貼り、「サイズについての声を小さめ・ちょうど・大きめ・言及なしに分けてください」と頼む
- 割合とレビューの区分を、靴に詳しい担当者の経験と比べる
この段階ではモデルを作りません。 確かめたいのは、「いつもと違うサイズ」が、返品の割合の差としてはっきり出るかです。
| 出てきた内容 | 判断 |
|---|---|
| 差がある明細の返品の割合が、差が無い明細よりはっきり高い | Python でモデルを作る段階に進む |
| 差の有無で返品の割合が変わらず、どの明細も高い | 会員ではなく商品の問題。ページのサイズの記載を先に見直す |
| 返品の理由の区分が「その他」ばかり | 返品の受付で理由を選ぶ運用が先 |
2行目が出ることは珍しくありません。 失敗ではなく、その商品のサイズの記載が実物と合っていないおそれが分かったということです。レビューの区分で「小さめ」が多ければ、確認メールより先にページを直してください。手元のAIサービスに貼るのはレビューの本文だけにし、会員の情報は貼りません。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 新しい商品の確率がいつも低い | 答えの確定していない注文を学習に入れている。30日が過ぎた注文だけを使う |
| 不良の返品まで見込んでしまう | 答えにサイズ以外の理由が混ざっている。理由の区分で絞る |
| 0.3と出た明細の返品が1割しかない | 確率を補正していない。CalibratedClassifierCV で補正する |
| 補正で確率がぎざぎざになる | 件数の少ない種類で isotonic を使った。sigmoid にする |
| 初めての会員が「いつもどおり」に見える | 履歴の無い会員を0で埋めている。空のままにする |
| 下書きに「返品」の語が入る | 指示で禁じ、受け取った後に語を検知する |
| ギフトの注文に確認メールが届く | 備考とギフトの設定を担当者が見る |
| 返事の無い注文が保留のまま | 期限を過ぎたら注文どおりに出荷する決まりを先に作る |
| 送った効き目が分からない | agent_action と outcome を残し、送った・送らないで比べる |
| 商品の問題を会員へのメールで済ませる | 月次の一覧でページの見直しに回す |
上の3行が、見込みの失敗のほとんどです。 どれも確率は出ているので、動いているように見えます。月に1回、確率の帯ごとに実際の返品の割合を並べる仕組みが無いと、ずれに気づけません。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 会員の購入と返品の履歴、選んだサイズ、注文の備考。体の大きさに近づく情報で、会員にとって知られたくないことが含まれます。
- 生成AIへ渡す範囲を絞る … 渡すのは商品の情報、サイズ表、理由の候補、以前に選ばれたサイズだけです。会員の名前、住所、購入の履歴の一覧は渡しません
- 見込みを会員の扱いの差に使わない … 確率は確認メールの候補を選ぶためのものです。確率の高い会員の注文を断る、返品の条件を変える、といった使い方はしません
- 確認メールで会員を疑わない … 文面はサイズの案内にとどめ、返品の見込みを伝えないことを指示と受け取り後の検査の両方で守ります
- 利用の目的を確かめる … 購入の履歴をこの目的に使うことが、自社のプライバシーポリシーに書いた利用の目的に入っているかを、運用を始める前に確かめます
- 見込みと判断の記録を残す … 確率、送ったか、結果を並べて残し、後から線の引き方の理由を説明できるようにします
誤りが起きた場合のリスクは、確認メールを送りすぎて会員にうるさがられることと、送るべき注文を見逃して返品が減らないことの2つです。 前者は線と備考の確認で、後者は確率の補正と月次の振り返りで防ぎます。
10まず何から始めるか
1週目:返品の理由の区分を整える
返品の受付の表で、理由の区分が必ず選ばれているかを確かめます。「その他」が多ければ、受付の画面で選ぶ運用に変えます。
2週目:1商品で並べてみる
返品の多い靴を1つ選び、「いつもと違うサイズ」「複数サイズ」「差が無い」で返品の割合を比べます。靴に詳しい担当者の目安と照らします。
3週目:レビューを区分してみる
その商品のレビューを手元のAIサービスで区分し、「小さめ」の声の割合と返品の割合を並べます。ページのサイズの記載を直す必要がないかも、ここで見ます。
4週目:印を付けて一覧を出す
Python で注文ごとに「いつもとの差」「複数サイズ」の印を付け、確認の一覧を出すところまで作ります。この時点では確率を出しません。
2か月目: モデルで確率を出して補正し、TimeSeriesSplit で検証します。確認メールの下書きを付けます。3か月目以降: 送った・送らなかった明細の結果を数え、線を引き直します。月次の商品ページの見直し候補を商品の担当者へ回します。確率の帯ごとの返品の割合が安定し、確認の一覧が出荷の締めの前に毎日処理しきれるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
HistGradientBoostingClassifier が欠けた値(NaN)をそのまま扱えること。categorical_features の既定が from_dtype で、カテゴリ型の列を自動で扱うこと。class_weight に balanced を指定できること。predict_proba で確率を返すこと | scikit-learn: HistGradientBoostingClassifier | 2026-10-07 |
CalibratedClassifierCV が分類器の確率を補正すること。method の既定が sigmoid で、isotonic は補正に使う件数が1,000件よりずっと少ないと過学習するため勧められないこと(版 1.9.1) | scikit-learn: CalibratedClassifierCV | 2026-10-07 |
TimeSeriesSplit が時間順のデータの分け方を作り、未来のデータで学習して過去を評価しないようにすること。gap で学習用の末尾と検証用の間を空けられること | scikit-learn: TimeSeriesSplit | 2026-10-07 |
構造化出力で output_config.format に type: "json_schema" を指定できること。文字数の制約(minLength/maxLength)が使えず、additionalProperties は false にする必要があること | Claude Docs: Structured outputs | 2026-10-07 |
返品の条件や、会員への対応の方針は、自社で決めてください。 本記事は製品の公開ドキュメントで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0739)についてのご相談はこちらから。
