BinAgg 再現追試

前処理の工夫とドメイン知識

前処理とドメイン特化メモ

本ページは、UCI Air Quality データセット [3] を BinAgg [2] の差分プライバシー(DP)線形回帰で扱う際の前処理を、再現者が同じ落とし穴を踏まないようにまとめた実務ノートである。特に欠損値センチネル -200 の扱いは、本追試で有用性指標の信頼性を左右した重要発見なので、節を分けて詳述する。

1. データ概要

同梱 CSV data/AirQualityUCI.csv [3] を対象とする。1 時間ごとのイタリア・大気質観測で、目的変数は CO(GT)(一酸化炭素の真値, mg/m³)、特徴量は以下の 12 次元である。

# 列名 種別
1 PT08.S1(CO) センサ応答
2 NMHC(GT) 真値
3 C6H6(GT) 真値
4 PT08.S2(NMHC) センサ応答
5 NOx(GT) 真値
6 PT08.S3(NOx) センサ応答
7 NO2(GT) 真値
8 PT08.S4(NO2) センサ応答
9 PT08.S5(O3) センサ応答
10 T 温度
11 RH 相対湿度
12 AH 絶対湿度

ファイル形式に固有のクセが 2 つある。

💡 補足: 上表の 12 特徴のうち NMHC(GT) は約 9 割が欠損(-200 であり、本追試では特徴ごと除外する(§3)。 したがって実験で実際に使う特徴は 11 次元である。

⚠️ 落とし穴: pd.read_csv でデフォルト(sep=',')のまま読むと 1 列に潰れる。さらに区切りを直しても、カンマ小数を変換しないと to_numeric がほぼ全行を NaN 化する。sep=';'decimal=',' を同時に指定するか、文字列置換 → to_numeric の二段で処理する。

2. 欠損値センチネル -200 の落とし穴(本追試の重要発見)

このデータセットは 欠損を実数値 -200 で表現するNaN ではない)。ここが最大の罠である。

BinAgg 同梱 example のクリーニングは、おおむね pd.to_numeric(..., errors='coerce') 後に dropna() するだけで、-200 を欠損として除去しない。結果、-200 が正常値のふりをして解析に流れ込む。CO(GT) 列では全 9357 行のうち 1683 行(約 18%)が -200 である。

この汚染は目的変数 \(y\) の分布を直接歪める。生の \(y\)-200 を残したまま)と、定義域 \((0, 15)\) でクリップした後の統計量を比べると差は歴然である。

\[ \bar{y}_{\text{raw}} = -34.21,\quad s_{\text{raw}} = 77.65 \qquad\Longrightarrow\qquad \bar{y}_{\text{clip}} = 1.766,\quad s_{\text{clip}} = 1.554 \]

生の平均が負になっているのは、本来 0–15 程度の濃度に大量の -200 が混ざるためで、物理的にあり得ない値である。

この -200 は、何を指標にするかで影響が変わる。

💡 教訓: 「データの罠」そのものより、指標の選び方が再現性を左右する。汚染や悪条件があっても、両手法が同じ対象を予測する RelMSE なら公平な比較が成り立つ。欠損処理や係数指標を変えた比較は補足実験にまとめた。

3. 採用した前処理(論文準拠)

E3 は論文の実データ設定(D7)に準拠する(scripts/03_real_airquality.py、計画は docs/plans/E3-paper-faithful.md)。

  1. ; 区切り・カンマ小数を変換し to_numeric + dropna のみ。-200 は残し、全 12 特徴を使う\(n=9357,d=12\))。
  2. 指標は予測誤差 RelMSE
  3. bounds は論文に倣い non-private(データ由来の min/max) を用いる(§4)。

この設定で、非プライベート OLS の RelMSE は 0.441(論文 D7 と完全一致)、BinAgg は μ=1 で 0.450(論文報告値 0.463 と整合)となり、論文 Table 2 を再現できた。

📘 採用した自明でない前処理の要約: (1) 区切り ;・カンマ小数を変換、(2) to_numeric+dropna のみで 欠損センチネル -200 は残す、(3) 全 12 特徴を使う(\(n=9357,d=12\))、(4) bounds はデータ由来の non-private な min/max、(5) 指標は予測誤差 RelMSE。いずれも論文の実データ設定(D7)に合わせたもの。

3.1 別の前処理を試す(補足実験)

欠損を行ごと削除する/補完する、あるいは係数レベルの指標で比べる、といった直観的な選択肢も妥当である。 これらは本体(論文準拠)とは別に補足実験で検討した。要点は、欠損を除くと予測 RelMSE の 絶対値は下がる(予測課題が易しくなる)一方、係数レベルの指標はこの実データ計画の悪条件性のため不安定になること。

⚠️ 補足: 欠損が支配的な NMHC(GT)(約 9 割欠損)を行除去で扱うと標本がほぼ消える(全列一括除去で 827 行)。 欠損が支配的な特徴は列ごと落とすのが定石である。

3.2 設計行列の悪条件性

この実データの回帰設計は著しく悪条件である。特徴量の標準偏差は 0.4〜406 と桁が異なり (センサ応答は 0〜3000 スケール、湿度などは小さい)、センサ系列は相互に強く相関する。実際 \(\mathrm{cond}(X^\top X)\approx 4.3\times10^8\)、非プライベート係数も \(\lVert\hat\beta_{\text{OLS}}\rVert\approx 0.15\) と微小である。 このため係数レベルの指標は一部の悪条件方向に支配されて不安定になる一方、予測 RelMSE は頑健である(§2 の教訓)。 係数レベルの有用性を見るときは、標準化・共線性の整理・次元削減が要る。

4. bounds(定義域の上下限)の与え方とドメイン知識

原則: 真に DP を満たすには、bounds をデータの min/max から決めてはならない(実データの極値は個人の情報であり、 min/max を bounds に使うと漏えいになる)。bounds は解析者がドメイン知識から外生的に与えるか、予算の一部を割いて private に推定すべき量である。

ただし論文の実データ比較では、明示的に non-private な(データ由来の)bounds を用いている(「これらの bounds は DP ではないが、手法比較の目的では許容される」と断ったうえで)[1]。E3 はこの方針に従い、各列の データ min/max を bounds とした(§3)。これは手法間の比較に焦点を当てた評価上の選択であり、運用では上の原則に従う。

⚠️ bounds の締まり具合が効く(本追試の確認): 同じ E3 設定で bounds を「データ由来の min/max(締まった non-private 値)」から 「ドメイン知識の緩い値(センサ 0–3000 等)」に替えると、BinAgg の RelMSE は \(\approx 0.45\) から \(\approx 1.0\) へ悪化した。 緩い bounds は感度を過大にしノイズを増やすため。論文が non-private で締まった bounds を使うのはこのためと解釈できる。

参考までに、BinAgg example が用いるドメイン知識ベースの緩い boundsは以下の通り(単位はデータの記録系に従う)。

変数 下限 上限
センサ応答(PT08.S*) 0 3000
NMHC(GT) 0 1500
C6H6(GT) 0 100
NOx(GT) 0 2000
NO2(GT) 0 500
T(温度) −20 50
RH(相対湿度) 0 100
AH(絶対湿度) 0 3
CO(GT)(目的) 0 15

clip=True を指定すると bounds 外の値は端点に丸められる。論文準拠の E3 では bounds をデータ min/max に取るため クリップは実質無効(範囲外が無い)。一方クリーン版(§3.1)のように -200 を除去する場合は、欠損除去を先に済ませてから bounds・clip を適用する(緩い bounds で -200 を端点へ丸めても欠損処理にはならない)。

💡 推奨: 温度 T のように下限が負になる量があるため、「特徴は非負」と決め打ちしないこと。各列の物理的にあり得る範囲を個別に設定する。湿度 RH の上限が 100(%)であることなど、単位の確認も忘れない。

5. シミュレーションデータ側の前処理方針

合成・検証用のシミュレーションデータでは、生成分布が既知なので bounds 設定で悩む必要はない。例えば

\[ X \sim \mathrm{Uniform}(0, 10)^3 \]

のように生成するなら、bounds はその既知の生成範囲 \([0, 10]\) から直接与える。実データと違い観測 min/max を覗く誘惑がそもそも存在せず、bounds は完全にデータ非依存に決まる。これが DP の前提(bounds は外生)と自然に整合するため、手法の素性を確認する用途に向く。

6. 再現者向けチェックリスト

論文準拠で再現する場合(E3 本体):

-200 を除去するクリーン版を作る場合(ロバストネス・逸脱):

参照

  1. BinAgg (Python package). Shuronglin/BinAgg, commit 13c09bb (2026-05-27). https://github.com/Shuronglin/BinAgg
  2. UCI Machine Learning Repository — Air Quality Data Set(同梱 data/AirQualityUCI.csv).