前処理とドメイン特化メモ
本ページは、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 つある。
- フィールド区切りが
,ではなく;(sep=';')。 - 小数点が カンマ表記(例:
2,6は2.6の意)。読み込み前に各数値フィールドで,→.変換が必要。
💡 補足: 上表の 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)\) でクリップした後の統計量を比べると差は歴然である。
生の平均が負になっているのは、本来 0–15 程度の濃度に大量の -200 が混ざるためで、物理的にあり得ない値である。
この -200 は、何を指標にするかで影響が変わる。
- モーメントや係数を直接比較する指標は汚染される: 生の \(y\) を基準に合成データの平均を比べると無意味な巨大誤差(mean 誤差 36 程度)になり、
-200を含むまま OLS を解くと係数も引っ張られる(例: AH 係数 \(-0.895\))。 - 予測誤差(RelMSE)は頑健: 論文 [1] は実データ評価で
-200を残したまま、予測誤差 \(\mathrm{RelMSE}=\lVert X\hat\beta-y\rVert_2^2/\lVert y\rVert_2^2\) を用いる。DP 推定も OLS も同じ(汚染を含む)\(y\) を予測するため、-200の影響が分子・分母および両手法に等しく乗り、相対比較が頑健に保たれる。
💡 教訓: 「データの罠」そのものより、指標の選び方が再現性を左右する。汚染や悪条件があっても、両手法が同じ対象を予測する RelMSE なら公平な比較が成り立つ。欠損処理や係数指標を変えた比較は補足実験にまとめた。
3. 採用した前処理(論文準拠)
E3 は論文の実データ設定(D7)に準拠する(scripts/03_real_airquality.py、計画は docs/plans/E3-paper-faithful.md)。
;区切り・カンマ小数を変換しto_numeric+dropnaのみ。-200は残し、全 12 特徴を使う(\(n=9357,d=12\))。- 指標は予測誤差 RelMSE。
- 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 設定で悩む必要はない。例えば
のように生成するなら、bounds はその既知の生成範囲 \([0, 10]\) から直接与える。実データと違い観測 min/max を覗く誘惑がそもそも存在せず、bounds は完全にデータ非依存に決まる。これが DP の前提(bounds は外生)と自然に整合するため、手法の素性を確認する用途に向く。
6. 再現者向けチェックリスト
論文準拠で再現する場合(E3 本体):
- [ ] 区切りは
;(sep=';')、カンマ小数(2,6→2.6)を変換したか - [ ]
to_numeric+dropnaのみ(-200は残す・全 12 特徴を使う)で \(n=9357,d=12\) になったか - [ ] 指標は予測誤差 RelMSE(係数誤差・モーメント誤差ではない)か
- [ ] bounds は論文に倣い non-private なデータ min/max にしたか(緩いドメイン bounds だと RelMSE が悪化)
- [ ] μ=1 の値を論文 Table 2(D7: OLS 0.441 / BinAgg 0.463)と並べて照合したか
-200 を除去するクリーン版を作る場合(ロバストネス・逸脱):
- [ ] 欠損が支配的な列(NMHC(GT) 約 9 割欠損)を列ごと除外したか
- [ ]
-200をNaN化し、使用列の欠損行を統計・回帰より前に除去したか - [ ] 論文設定ではない旨を明記し、論文準拠版と区別して報告したか
参照
- BinAgg (Python package). Shuronglin/BinAgg, commit 13c09bb (2026-05-27). https://github.com/Shuronglin/BinAgg
- UCI Machine Learning Repository — Air Quality Data Set(同梱
data/AirQualityUCI.csv).