コンテンツにスキップ

デモデータについて(case04)

このデモで使う固定データの作り方をまとめた開発者向けメモです。学習の本筋は ① 事例概要 から読んでください。

デモは実在データを使わず、論文が公表した架空ブロック(7人)の数値をそのまま用います。乱数を使わない決定的な固定データなので、再生成は常にバイト一致します。

データモデル

データを見る のとおり、2つの固定データを持ちます。

ファイル 役割
residents.csv 真の個票(7人の年齢・性別・人種・配偶関係)=論文の唯一解。非公開扱い。
published_statistics.csv 公表された統計表(14行・うち7行は秘匿)。攻撃者の入力。

属性(性別・人種・配偶関係)は原典(米国センサスの例)の区分をそのまま用いています。教材用の固定データであり、実在の個人とは無関係です。

検証オラクル(この事例の強み)

論文に正解(唯一解)が公表されているため、実装の正しさを外部から独立に検証できます。テストでは二重に確認します。

  • 公表統計 → 個票: 公表統計だけから再構築した解が一意で、residents(論文解)と全一致すること。
  • 個票 → 公表統計: 真の個票から人数・中央値・平均を再計算すると、公表統計表の非秘匿セルと一致すること(別経路の検算。両者が同じ間違いをしていないことを確認)。

再構築ソルバ

  • 公表統計を制約に翻訳し、CP-SAT(OR-Tools) で全解を数え尽くします。
  • ソルバは生成器と同じモジュールに置き、テストが import します(notebook は Colab 用に同等のコードを自己完結で持ちます)。
  • 生成器・ソルバ: src/dummy_data/case04_reconstruction.py
  • 依存: ortools>=9.10(CP-SAT)。Colab では pip install ortools で導入。

出力ファイル

  • data/case04_reconstruction/raw/residents.csv
  • data/case04_reconstruction/raw/published_statistics.csv