1章:ロジスティック回帰を「業務のYes/No判断」に落とし込む(0/1・確率・閾値の基本)
仕事の意思決定って、突き詰めるとYes/Noが多いはずです。たとえば「このリードに優先的に電話する?」「この顧客に与信を出す?」「このユーザーは解約しそう?」「この在庫は発注する?」など。ロジスティック回帰は、こうした二択の判断を“勘”から“確率”へ引き上げるための考え方です。
まず、ロジスティック回帰が扱う目的はシンプルで、結果(目的変数)を0/1で表します。
- 1:起きた(成約した/延滞した/解約した/発注すべき)
- 0:起きなかった(成約しない/延滞しない/解約しない/発注不要)
ここで重要なのは、ロジスティック回帰は「YesかNoかを当てる」以前に、Yesになる確率を出すことです。つまりアウトプットは、0か1ではなく0〜1のスコア(確率)になります。
例えば、ある見込み客に対して「成約確率0.72」と出たとします。これは“成約するかどうか”を断言しているわけではなく、判断材料として「期待値が高い寄り」と示している状態です。上司への報告も「今月成約します」ではなく、「根拠があって72%と見てます」に変わり、会話が一段具体になります。
では、その確率をどうやって業務のYes/Noに変換するのか。ここで出てくるのが閾値(しきいち)です。閾値は、確率スコアを最終判断に落とすためのルールで、たとえば次のように決めます。
- 成約確率が0.6以上ならYes(優先架電)
- 解約確率が0.3以上ならYes(フォロー対象)
- 延滞確率が0.2以上ならYes(与信を絞る)
注意したいのは、閾値0.5が正解とは限らないこと。たとえば営業なら「Yesにしたコールが外れる(無駄打ち)」より「本当は刺さるのに見逃す(機会損失)」の方が痛い場合があります。逆に与信なら、1件の事故の損失が大きいので「疑わしきはNo」に倒す設計が合理的です。つまり閾値は数学というより、業務コストとリスクの設計です。
ここまでをまとめると、ロジスティック回帰的な考え方は次の流れで業務判断に直結します。
- 目的変数を0/1で定義する(何をYesとするかを明確にする)
- 説明変数(要因)から確率を計算する
- 確率を閾値で区切って、運用上のYes/Noに変換する
Excelでやるメリットは、難しいツールや環境がなくても「確率スコア→閾値→判断」の型をすぐ作れることです。次章では、まずその土台として、Excel上で“確率スコア”を作る前提となる目的変数・説明変数の置き方と、データ整形(欠損・外れ値)の考え方を整えていきます。
2章:Excelだけで作る“確率スコア”の土台(目的変数・説明変数・データ整形・欠損/外れ値)
ロジスティック回帰をExcelで回す前に、いちばん効くのがデータの置き方です。数式やソルバーの前に、ここでコケると「それっぽい確率」が出ても業務で使えません。ポイントは目的変数(0/1)を1列に、説明変数(要因)を横に並べるだけ。まずは型を固定しましょう。
1) シートの基本形:1行=1件、1列=1項目
おすすめの構成は次の通りです。
- A列:ID(顧客ID、案件ID、受注番号など)
- B列:目的変数Y(0/1)
- C列以降:説明変数X(例:最終接触からの日数、過去購入回数、利用頻度、支払い遅延回数など)
ここで大事なのは、目的変数の定義ブレを消すこと。たとえば「成約」を1にするなら、いつまでに成約したら1なのか(今月中?30日以内?)を明文化しておきます。期間が曖昧だと、後で閾値を作っても運用が安定しません。
2) 説明変数は「業務で改善できる要因」を優先する
説明変数は何でも入れがちですが、最初は5〜15個くらいに絞るのが現実的です。20代のサラリーマンが明日から使うなら、「見て納得できる指標」から始めるのが正解。
- 営業:接触回数、見積提出有無(0/1)、最終接触からの日数、業種、従業員規模
- 解約:ログイン日数、利用回数、機能Aの使用有無(0/1)、問い合わせ件数
- 与信:延滞回数、取引期間、平均入金遅れ日数、与信枠使用率
「説明変数に未来情報が混ざる」事故もよく起きます。たとえば解約予測で解約後に確定する情報(解約理由アンケートなど)を入れると、当たり前に当たるけど実務では使えません。判断時点で手に入るデータだけに限定しましょう。
3) カテゴリ項目は“0/1化(ダミー変数)”が基本
Excelで扱いやすいのは数値です。都道府県やプラン名などのカテゴリは、まずダミー変数にします。
- 例:「プラン=Pro」なら Plan_Pro 列を作り、Proなら1、違うなら0
- 例:「業種=IT」なら Ind_IT 列を作り、ITなら1、違うなら0
ダミーは全部作りすぎると列が増えます。最初は件数が多いカテゴリだけに絞り、その他は「Other」にまとめると回しやすいです。
4) 欠損値:まず「欠けている理由」を分けて扱う
欠損は放置すると計算が止まります。対処は大きく3つ。
- 0で埋めて良い:回数系(問い合わせ回数が空=0件、など)
- 代表値で埋める:金額や日数は中央値/平均(外れ値が多いなら中央値)
- 欠損フラグを作る:空欄そのものが意味を持つ場合(例:年収未入力はリスク)
実務で効くのは3つ目の欠損フラグです。たとえば「年収」列の欠損を中央値で埋めつつ、Income_IsMissing列を作って欠損なら1、そうでなければ0。これで「空欄=怪しい」をモデルが拾えます。
5) 外れ値:消すより“上限を切る”が安全
外れ値を単純に削除すると、母数が減って現場のデータとズレます。おすすめはウィンズライジング(上限/下限で丸める)です。
- 例:購入金額が極端に大きい場合、上位1%点を上限としてそれ以上は上限値に置き換える
Excelなら、パーセンタイルを使って上限を作れます(例:PERCENTILE.INC(範囲,0.99))。その上で各行をMIN(元の値,上限)で丸めると、極端値の影響を抑えつつ情報も残せます。
ここまでの準備ができれば、あとは「説明変数から確率スコアを出す」箱を作るだけです。次章では、Excelのソルバーを使って回帰係数を最尤推定し、ロジスティック式を組み立てる手順に入ります。
3章:回帰係数はこう作る:ソルバーで最尤推定してロジスティック式を組む(手順と注意点)
2章で作った「1行=1件、B列に目的変数Y(0/1)、C列以降に説明変数X」の形ができたら、次は回帰係数(β)をExcelで求めます。ポイントは、ロジスティック回帰は「誤差を最小化」ではなく、観測された0/1が起きる確率(尤度)を最大化する=最尤推定だという点です。Excelではこれをソルバーで実行します。
1) まず「ロジスティック式」をシートに組む
係数はソルバーが動かすので、先に計算の配線を作ります。例として、説明変数が3つ(X1〜X3)あるケースで書きます。
- 係数セル:どこかにβ0(切片), β1, β2, β3 を置く(初期値は0でOK)
- 線形予測子:各行で
z = β0 + β1*X1 + β2*X2 + β3*X3 - 確率:各行で
p = 1/(1+EXP(-z))
Excel上では、たとえば係数が H2:H5(H2=β0, H3=β1…)にあり、1行目データのXが C2:E2なら、zは次のイメージになります。
= $H$2 + $H$3*C2 + $H$4*D2 + $H$5*E2
pは:
= 1/(1+EXP(-zセル))
ここは1章で話した「確率スコア」のエンジン部分です。βが決まれば、以後は新しいデータにも同じ式で確率が出せます。
2) 最尤推定のために「負の対数尤度」を作る
ソルバーには「最大化したい(または最小化したい)目的セル」が必要です。ロジスティック回帰では尤度を最大化したいのですが、実務では計算が安定するように負の対数尤度(NLL)を最小化するのが定番です。
各行のY(0/1)とp(予測確率)から、行ごとのNLLは次で作れます:
= -( Y*LN(p) + (1-Y)*LN(1-p) )
そして全行分を合計して「合計NLL」を作ります(これが目的セル)。
注意:pが0や1に極端に寄ると LN(0) でエラーになります。実務ではpをわずかにクリップしておくと安定します。
=MAX(1E-6, MIN(1-1E-6, p))
この「p_クリップ」をNLL計算に使うのがおすすめです。
3) ソルバー設定:目的=合計NLL最小、変数=β、手法=GRG
準備できたら、[データ] → [ソルバー]を開いて以下のように設定します。
- 目的セル:合計NLL(負の対数尤度の合計)
- 目標:「最小値」
- 変数セル:β0〜βk(係数のセル範囲)
- 解法:基本はGRG非線形(ロジスティック関数が非線形のため)
制約条件は原則不要ですが、まず動かす段階ではシンプルに「制約なし」でOKです(過剰に縛ると収束しない原因になります)。実行して、合計NLLが下がっていけば係数が推定できています。
4) つまずきやすい注意点(Excel運用で壊れがちなところ)
- 説明変数のスケール差:金額(数万)とフラグ(0/1)が混在すると収束が遅くなることがあります。必要なら金額や日数は標準化(平均との差/標準偏差)や、少なくとも桁を合わせる工夫を。
- 完全分離(当たりすぎ問題):ある条件だと必ずY=1(または0)になるデータだと、係数が極端に発散しやすいです。ダミーが細かすぎる/サンプルが少ない列がある場合は、カテゴリをまとめる・列を減らすのが現実的。
- 列の入れ替え・追加で参照がズレる:係数セルは固定し、zは可能なら
SUMPRODUCTで作ると壊れにくいです(例:切片+SUMPRODUCT(係数,変数行))。 - 学習データだけで満足しない:同じデータで係数を作って同じデータで評価すると良く見えます。最低限、データを学習用/評価用に分ける発想は持っておきましょう(評価の話は4章で扱います)。
ここまでで、Excel上に「Xを入れたらpが出る」ロジスティック式が完成しました。次にやるべきは、そのpをどうYes/Noに変換するかです。4章では、混同行列や適合率/再現率を使って、“当てる”より“決める”ための閾値設計に進みます。
4章:「当てる」より「決める」:閾値設計と評価(混同行列・適合率/再現率・コストで最適化)
3章で「確率スコアp」が出せるようになったら、次に必要なのはモデルの点数を上げることより、現場で迷わず決められるルールにすることです。つまり「pが何%以上ならYes?」の閾値(しきいち)を、根拠つきで設計します。
1) まず評価用データを分ける(最低限の現実チェック)
同じデータで学習して同じデータで評価すると、良く見えて当然です。Excelでも、行をざっくり学習80%/評価20%に分けるだけでOK。
- 例:乱数列
=RAND()を作り、0.8未満を学習、0.8以上を評価にする - 係数βは学習側で作り、評価側はそのβでpを計算して「当たり具合」を見る
2) 混同行列を作る:Yes/No判断の「内訳」を見える化
評価データで、ある閾値tを決めて「予測クラス」を作ります。
=IF(p>=t,1,0)
そして実績Y(0/1)と突き合わせて、混同行列(TP/FP/FN/TN)を出します。
- TP(真陽性):予測Yes、実績もYes(狙い通り)
- FP(偽陽性):予測Yes、実績はNo(無駄打ち)
- FN(偽陰性):予測No、実績はYes(取り逃し)
- TN(真陰性):予測No、実績もNo(見送り成功)
Excelなら COUNTIFS で数えられます(例:TPは COUNTIFS(実績範囲,1, 予測範囲,1))。この4つが揃うと、「当たった外れた」ではなく外し方の種類まで議論できます。
3) 適合率・再現率:営業/与信で“正解の指標”は変わる
混同行列からよく使う指標を計算します。
- 適合率(Precision):
TP/(TP+FP)
└ Yesと判定した中で、どれだけ当たっていたか(無駄打ちの少なさ) - 再現率(Recall):
TP/(TP+FN)
└ 本当のYesを、どれだけ拾えたか(取り逃しの少なさ)
たとえば、営業の優先架電なら「多少外してもいいから取り逃したくない」ケースが多く、再現率寄りになりがちです。逆に与信・不正検知は、Yes判定のコストが重い(事故が痛い、対応工数が重い)ので、適合率寄りが合理的。ここで大事なのは、0.5を正解にしないこと。正解は業務によって変わります。
4) 閾値はコストで決める:いちばん“損しない”線を引く
そこで強いのが、閾値をコスト最小で決める方法です。考え方はシンプルで、外し方ごとに「痛さ」を置きます。
- FPコスト:無駄な架電1件=200円、無駄な督促1件=500円…
- FNコスト:取り逃し1件=5,000円(機会損失)、延滞見逃し=50,000円…
そして評価データの混同行列から、総コストを計算します。
総コスト = FP*FPコスト + FN*FNコスト(必要ならTP/TNも反映)
あとは閾値tを0.1〜0.9で刻み(0.01刻みでも可)、それぞれのTP/FP/FN/TN→総コストを並べ、総コストが最小のtを採用します。これなら上司への説明も「感覚で0.6にしました」ではなく、“この閾値が一番損が少ない”と言えます。
5) 実務の落とし穴:閾値は「固定」より「運用」
最後に重要な現実論です。閾値は一度決めて終わりではなく、次の要因でズレます。
- 母集団が変わる(新規施策でリードの質が変化、景気で延滞率が変化)
- 処理能力が変わる(今月は架電できる件数が少ない、督促工数が逼迫)
おすすめは、閾値を「確率○以上」だけでなく、上位N件(例:p上位200件を今日の架電対象)と併用する設計。業務のキャパに合わせて、判断ルールが破綻しません。
ここまでで「pを出す」から「pで決める」へ進めました。次章では、この型をそのまま流用できるように、営業・与信・解約・在庫などシーン別のテンプレに落としていきます。
5章:明日から使える業務シーン別テンプレ(営業リード優先度、与信/督促、離職・解約兆候、在庫/発注の判断)
ここからは「確率pを出して、閾値でYes/Noを決める」という1〜4章の型を、業務でそのまま使えるテンプレに落とします。共通の作りはシンプルで、①目的変数Y(0/1)→②説明変数X→③p算出→④閾値(または上位N件)で運用です。
テンプレA:営業リード優先度(今日かける順番を決める)
- Y(1/0):リードが「30日以内に成約」=1、非成約=0
- X例:最終接触からの日数、接触回数、資料DL有無(0/1)、見積提示有無(0/1)、従業員規模
- 運用:p上位N件を架電(キャパに強い)+補助で閾値
営業はFN(取り逃し)のコストが大きいので、4章の考え方どおり再現率寄りの閾値にしやすいです。「上位200件」などの枠運用にすると、月初・月末で工数がブレても破綻しません。
テンプレB:与信/督促(事故を減らし、工数も守る)
- Y(1/0):次回請求で「○日以上延滞」=1、延滞なし=0
- X例:過去延滞回数、平均入金遅れ日数、与信枠使用率、取引期間、入金方法(口座振替=1など)
- 運用:閾値を2段にする(例:p≥0.6は強督促、0.3〜0.6はリマインド)
与信はFPでも取引を止める心理的コストがありつつ、FN(見逃し事故)はもっと痛い。そこで対応強度を段階化すると、「YES/NO」の二択より現場が回ります。閾値はコスト最小で置き、月次で見直すのが現実的です。
テンプレC:離職・解約兆候(先回りフォロー対象を作る)
- Y(1/0):来月解約=1、継続=0(BtoBなら「更新失注」でもOK)
- X例:直近7/30日の利用回数、ログイン間隔、主要機能の利用有無(0/1)、問い合わせ件数、未解決チケット数
- 運用:pが急上昇した人を拾う(スコアの前年差分でトリガー)
解約は「絶対値p」だけだと、もともとリスク高めの人ばかりが並びがちです。そこで、Excelでもできる前週比/前月比でpが上がった顧客(Δp)を別枠で抽出すると、打ち手(オンボーディング、CS架電)が刺さりやすくなります。
テンプレD:在庫/発注の判断(切らさず、持ちすぎない)
- Y(1/0):「次のリードタイム内に欠品する」=1、欠品しない=0
- X例:直近販売数、季節フラグ、プロモ有無(0/1)、現在庫、安全在庫、納期(日数)
- 運用:p≥tで発注Yes+期待損失で発注量の優先順位を作る
在庫は「欠品の損失」と「過剰在庫の損失」が拮抗します。まずは4章のコスト発想で、欠品(FN)重めなら閾値を下げ、在庫圧縮(FP重め)なら閾値を上げる。さらに一歩進めるなら、p×欠品時損失で期待損失を置き、上から順に発注検討すると意思決定が速くなります。
どのテンプレでも、最後に効くのは「閾値を固定しない」運用設計です。上位N件や対応強度の段階化を組み合わせると、Excelでも“使われる判断ルール”になります。


コメント