コンテンツにスキップ

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

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

デモは実在データを使わず、生成した合成データで「安易な匿名化 → 再識別」を再現します。データは決定的に生成され、誰が実行しても同じ結果になります。

データモデル

データを見る のとおり、drivers(運転者マスタ)と trips(走行履歴)の2テーブルを運転者IDで関連づけます。

項目
運転者数 2,000
走行履歴 総件数 17,950
営業所数 10(各200名)

運転者IDの形式(デモの要)

  • 形式は <事業者コード>-<営業所コード>-<連番>(各3桁)。この事業者の事業者コードは 100 で固定。
  • そのため総当りの候補空間は 100-000-000100-999-99910^6(約100万通り) に収まります。短い文字列の SHA-256 を100万回計算しても数秒で終わるため、教材として「総当りが即座に完了する」様子を見せられます。
  • 実在事例では番号形式の公知性がハッシュの候補空間を小さくしていました。桁数・事業者コードの具体値は、総当りが数秒で終わる規模に収めるための教材用の設定です(再識別が成立する構造そのものは実在事例と同じ)。

行動傾向(再識別後の分析用)

営業所ごとに立ち寄りやすいエリアへ重みを付け、一様乱数にしていません。これにより、再識別後に「どの営業所の運転者がどのエリアを流しているか」の傾向が見え、再識別で何が分かってしまうかを実感できます(レポート未記載の教材用の独自設定)。

再現性

  • 乱数 seed(SEED = 20260807)と履歴開始日(HISTORY_START = 2026-01-01)を固定。再生成はバイト一致します。
  • 生成結果は data/case03_reidentification/raw/ にコミットし、Notebook はそれを取得します。
  • 生成器: src/dummy_data/case03_reidentification.py
  • ハッシュ化・総当り(再識別)は生成器では行わず、Notebook(層②)で実演します。

出力ファイル

  • data/case03_reidentification/raw/drivers.csv
  • data/case03_reidentification/raw/trips.csv