メインコンテンツへスキップ
ブログ一覧に戻る
統計・データサイエンス

数量化Ⅰ類|カテゴリ説明変数で連続目的を予測(スコア化の実務)

2025年11月2日
最終更新: 2026年10月8日
8分で読めます

この記事でわかること

数量化Ⅰ類のカテゴリ点数は、絶対的な優劣や施策効果ではありません。架空12件の売上を使い、基準カテゴリと中心化が同じ予測になる理由を図・表・Pythonで確認します。残差平方和、学習内R²、行列の階数、少数カテゴリと未知水準、交互作用、未見評価の条件を整理し、旧ミニコードと三つの練習問題を具体化します。

2026年10月8日に数量化Ⅰ類の原資料とR、NumPy、scikit-learnの現行ドキュメントを再確認した。カテゴリ点は基準カテゴリや和が0になるコントラストなど表示上の制約を置いた最小二乗の係数で、Rのコントラストは水準数より一列少なくなる場合があり、NumPyの最小二乗は残差・階数・特異値も返す。学習内R²やカテゴリ点を絶対的な優劣・因果効果と読まず、未知水準、少数カテゴリ、欠測、未見期間、前処理のリークを分けて評価する。

30秒で要点

数量化Ⅰ類は、色・ブランド・販売チャネルのようなカテゴリから、売上などの数値を予測する方法です。各カテゴリに点数を与え、該当する点数を足します。ただし、点数はカテゴリ固有の「良さ」ではありません。同じ予測を、異なる基準や制約で表せます。

  • 目的変数が数値ならⅠ類、クラスを分けたいならⅡ類が候補です。
  • 切片とカテゴリ点数を同時に自由にすると、点数は一意に定まりません。基準カテゴリや中心化の制約を決めます。
  • 同じ説明変数・加法モデル・最小二乗の設定なら、ダミー変数による回帰と同じ予測を表せます。点数表示だけで自由度や過学習が減るわけではありません。
  • スコアの符号は基準と他の説明項目に依存します。売上を増やす施策の因果効果とは別です。

カテゴリを数値に置き換える前に、予測したいものを決める

例えば「色・ブランド・チャネルから、次の期間の売上を予測したい」という問いです。顧客や商品をどの単位で数えるか、売上の集計期間、予測時点で分かる項目を先に固定します。売上を知った後で決まる区分を説明変数に入れると、未来の予測を評価できません。

用語は次のように整理できます。

表が収まらない場合は、横にスクロールできます

用語この記事での意味読み違えやすい点
アイテム色やチャネルなどの説明項目項目同士が独立とは限らない
カテゴリ赤・青、店舗・通販などの水準名義カテゴリに勝手な順序を付けない
カテゴリスコア学習データで推定した水準ごとの点数絶対的な優劣や施策効果ではない
制約基準を0にする、度数で重み付けした平均を0にするなど異なる制約の点数をそのまま比べない
林の原論文(1952年、pp.71–75)は、各項目の選択カテゴリに数値を与え、その和と数値の外的基準との関係を扱っています。ここでは読みやすい切片付きの最小二乗モデルで説明します。

項目jのカテゴリkに属するときだけ1になる指示変数をIとすると、予測値は「切片μ+該当カテゴリのスコアの和」です。観測値と予測値の差を二乗して足した値を小さくします。差の和ではなく、差の二乗和です。

架空12件で、二つの点数表が同じ予測になることを確かめる

以下は学習用に作った売上の数値です。単位は任意で、実在の会社や施策の結果ではありません。ブランドA/BとチャネルX/Yを組み合わせ、各組3件ずつ置きます。

表が収まらない場合は、横にスクロールできます

ブランドチャネル架空の観測値3件組の平均・今回の予測
AX8, 10, 1210
AY12, 14, 1614
BX14, 16, 1816
BY18, 20, 2220

基準をA・Xにすると、切片10、Bの係数6、Yの係数4で表せます。一方、各項目の点数平均を0にすると、切片15、A/Bが-3/+3、X/Yが-2/+2です。例えばB・Yの予測は「10+6+4」でも「15+3+2」でも20になります。

架空12件の予測10・14・16・20は、切片10の基準カテゴリ表でも切片15の中心化表でも同じ。学習内R²は39/47
著者が設定した架空12件。四つの組に3件ずつ、棒は同一尺度の予測値。カテゴリの点数表が異なっても予測は一致する。学習内の当てはまりであり、施策効果や未知期間の精度ではない。

表が収まらない場合は、横にスクロールできます

表現切片A / BX / YB・Yの予測
A・Xを基準にする100 / 60 / 420
各項目を中心化する15-3 / 3-2 / 220

一般には、項目jについて「カテゴリ人数n(j,k)×スコアa(j,k)」の和を0にする、度数で重み付けした中心化を使えます。今回の各水準は6件ずつなので、単純な平均も0になります。人数が違うと、単なるスコアの合計0とは異なります。Rのcontrast仕様でも基準カテゴリ方式とsum-to-zero方式は区別されています。

この例の残差は各組で-2, 0, 2、残差平方和は32です。全体平均15からの平方和は188なので、学習内R²は1-32/188=39/47、約0.8298です。これは12件への当てはまりであり、未知の商品・期間でも同じ精度になるという意味ではありません。

ミニコードを、実際に解ける最小二乗の教材にする

旧稿の概念説明用Pythonを具体化します。対象はPython3.12、NumPy2.1.3です。追加の学習ライブラリやネット接続は使いません。lstsqの仕様に従って階数を確認し、残差は明示的に計算します。返される残差配列が空であることを、誤差0と解釈しないためです。

import numpy as np

# 全て架空。各ブランド×チャネルに3件。
cells = [(0, 0, 10), (0, 1, 14), (1, 0, 16), (1, 1, 20)]
rows = [(b, c, mean + e) for b, c, mean in cells for e in (-2, 0, 2)]
b, c, y = np.asarray(rows, dtype=float).T
X = np.column_stack([np.ones(len(y)), b, c])
beta, _, rank, singular_values = np.linalg.lstsq(X, y, rcond=None)
assert rank == 3
prediction = X @ beta
centered = 15 + np.where(b == 0, -3, 3) + np.where(c == 0, -2, 2)
assert np.allclose(beta, [10, 6, 4])
assert np.allclose(prediction, centered)

sse = float(np.sum((y - prediction) ** 2))
sst = float(np.sum((y - y.mean()) ** 2))
print("coefficients", np.round(beta, 6).tolist())
print("SSE, SST, R2", round(sse, 6), round(sst, 6), round(1 - sse / sst, 6))

# 切片+全カテゴリ列は冗長。5列あっても階数は3。
redundant = np.column_stack([np.ones(len(y)), 1-b, b, 1-c, c])
assert np.linalg.matrix_rank(redundant) == 3
assert np.isclose(sse, 32) and np.isclose(sst, 188)

係数は10・6・4、最後の出力は32、188、0.829787です。全カテゴリ列を並べた行列でも数値解が返る場合がありますが、それを各係数が一意に識別された証拠にしてはいけません。

売上ケースで点数を読むときの条件

ブランドBの点数がAより6大きいのは、このデータと加法モデルでチャネルを調整した予測差です。ブランドをBへ変えれば必ず売上が6増える、という結論ではありません。価格、顧客層、販売期間など未調整の違いが残る場合があります。

また、この教材はブランドの差がどのチャネルでも同じになる加法形です。チャネルによって差が変わるなら、交互作用の検討が必要です。その分パラメータが増えるため、セルごとの件数や未観測の組合せを確認します。

表が収まらない場合は、横にスクロールできます

確認すること実務での扱い
少数カテゴリ意味の違いを無視して統合せず、頻度・欠測・業務上の定義を確認する
新しいカテゴリ学習時に無かった水準の扱いを事前に決める。未知を基準カテゴリと同一視しない
高い学習内R²期間や顧客単位を分けた未見評価と比較する
正則化の導入ペナルティと符号化を明示する。異なる制約でも無条件に同じ推定になるとは限らない
交差検証の公式説明のとおり、学習データへの当てはまりと未見評価は分けます。カテゴリの統合、欠測処理、正則化の選択も訓練側で決めます。検証結果を見て調整を続けたデータを、最後の独立テストと呼ばないでください。

練習問題で判断を確認する

  1. 20以上の水準がある項目は、全部まとめるべきですか? いいえ。件数と意味を確認し、業務上同じと説明できる統合や正則化を候補にします。統合規則も訓練側で決め、未見評価を行います。
  2. スコアの制約はなぜ必要ですか? 全カテゴリへ同じ定数を足し、切片から引いても予測が変わらないためです。基準や中心化で表示を定めます。今回の二つの点数表が確認例です。
  3. ダミー回帰との違いは何ですか? 同じカテゴリ・加法形・最小二乗なら、制約を整えることで同じ予測を表せます。表示を点数表にしただけで推定する情報が減ったり、因果効果が分かったりするわけではありません。

連続値の目的を扱うときはこの予測差から考えます。目的が解約/継続などのクラスなら、数量化Ⅱ類で、得点の分離と判定しきい値を分けて確認できます。

よくある質問(FAQ)