# Persona Data Structure v1.0

この文書は、AIsimで用いる仮想住民ペルソナのデータ構造を公開用に整理したものである。ペルソナは単一の長文プロフィールではなく、研究目的に応じて複数レイヤーに分けて管理している。

## 全体像

ペルソナは `persona_id` を主キーとして、以下4つの主要レイヤーを結合して使う。

| Layer | ファイル | 役割 |
|---|---|---|
| 01 nucleus | `01_persona_nucleus_v1_0.jsonl` | シミュレーション設計上の基本セル。年齢層、性別、居住類型、信頼水準など |
| 02 expanded | `02_persona_expanded_v1_0.jsonl` | LLMで生成・整備した生活史、世界観、情報環境、語り口 |
| 03 extension | `03_persona_extension_v1_0.jsonl` | 分析用に派生させた構造化属性。政策リテラシー、行政接触、説明選好など |
| 04 geo | `04_persona_geo_v1_0.jsonl` / `.geojson` | `specific_city` を実在自治体に正規化し、代表緯度経度を付与 |

結合キー:

```text
persona_id
```

ID形式:

```text
P0000001
```

## 01 nucleus: 実験セルとしての最小ペルソナ

`nucleus` は、ペルソナ集合を系統的に作るための最小設計変数である。各レコードは、実験セル `cell_id` とセル内反復 `replicate_id` を持つ。

主なフィールド:

```json
{
  "persona_id": "P0000001",
  "dataset_version": "core_anchor_v1.0",
  "source_version": "v1.0",
  "migration_status": "newly_generated",
  "persona_set": "core_anchor",
  "cell_id": "C0001",
  "replicate_id": 1,
  "nucleus": {
    "age_group": "60s",
    "gender": "female",
    "residence": "small_municipality",
    "trust_level": "medium",
    "populism_affinity": "low",
    "nfc": "high",
    "info_environment": "traditional"
  }
}
```

### nucleus variables

| Field | Values | Meaning |
|---|---|---|
| `age_group` | `18_29`, `30s`, `40s`, `50s`, `60s`, `70s`, `80plus` | 年齢層 |
| `gender` | `male`, `female` | 性別カテゴリ |
| `residence` | `regional_core_city`, `small_municipality`, `mountainous_area`, `tourism_area` | 居住地類型 |
| `trust_level` | `low`, `medium`, `high` | 行政・制度への基礎的信頼 |
| `populism_affinity` | `low`, `high` | 反エリート感度・ポピュリズム親和性 |
| `nfc` | `low`, `high` | Need for Cognitive Closure。曖昧さへの耐性に関係 |
| `info_environment` | `traditional`, `social` | 主な情報環境 |

`nucleus` は、生成された個人像の背後にある実験計画表である。分析時には、まずこのセル構造で反応差を確認できる。

## 02 expanded: 生活史・世界観・語り口

`expanded` は、nucleusだけでは表現できない生活文脈を持たせるための文章ベースのプロフィールである。シミュレーションでモデルに渡す「ペルソナらしさ」の中心になる。

上位構造:

```json
{
  "persona_id": "P0000001",
  "dataset_version": "expanded_v1.0",
  "source_version": "v1.0",
  "expanded": {
    "basic_profile": {},
    "life_story": {},
    "everyday_life": {},
    "worldview": {},
    "information_ecosystem": {},
    "accountability_triggers": {},
    "voice": {}
  }
}
```

### expanded.basic_profile

| Field | Meaning |
|---|---|
| `specific_city` | 居住自治体。後続処理で実在自治体へ正規化 |
| `occupation` | 職業 |
| `education` | 学歴 |
| `income_bracket` | 所得階層 |
| `family_structure` | 世帯・家族構成 |

### expanded.life_story

| Field | Meaning |
|---|---|
| `origin_and_migration` | 出身・移住歴 |
| `career_path` | 職業経歴 |
| `economic_situation` | 経済状況 |
| `community_roots` | 地域との結びつき |

### expanded.everyday_life

| Field | Meaning |
|---|---|
| `typical_weekday` | 平日の生活 |
| `typical_weekend` | 休日の生活 |
| `local_haunts` | よく行く場所・地域活動圏 |

### expanded.worldview

| Field | Meaning |
|---|---|
| `view_of_government` | 行政観 |
| `view_of_society` | 社会観 |
| `view_of_fairness` | 公平性への考え方 |
| `deeper_values` | 深い価値観 |

### expanded.information_ecosystem

| Field | Meaning |
|---|---|
| `daily_information_routine` | 日常的な情報接触 |
| `trusted_sources` | 信頼する情報源 |
| `distrusted_sources` | 信頼しにくい情報源 |
| `social_media_behavior` | SNS利用態度 |

### expanded.accountability_triggers

評価報告書を読んだとき、どのような説明に納得し、どのような説明に反発するかを表す。

| Field | Meaning |
|---|---|
| `satisfies_me_when` | 満足する条件 |
| `angers_me_when` | 怒りを感じる条件 |
| `makes_me_trust_when` | 信頼する条件 |
| `makes_me_distrust_when` | 不信を抱く条件 |
| `makes_me_indifferent_when` | 関心を失う条件 |

### expanded.voice

| Field | Meaning |
|---|---|
| `typical_quote_positive` | 肯定的なときの言い方 |
| `typical_quote_negative` | 否定的なときの言い方 |
| `internal_monologue_when_reading_report` | 報告書を読むときの内的独白 |

## 03 extension: 分析用の構造化拡張属性

`extension` は、expandedの文章プロフィールやnucleusから、分析しやすいカテゴリ変数を派生させたレイヤーである。原則としてルールベース抽出を優先し、不確実な項目は無理に断定しない。

上位構造:

```json
{
  "persona_id": "P0000001",
  "persona_set": "core_anchor",
  "extension_version": "v1.0",
  "generation_batch_id": "EXT-RULE-V1-0",
  "source_basis": {},
  "calibration_status": {},
  "age_and_life_stage_profile": {},
  "gendered_life_context": {},
  "derived_profile": {},
  "civic_and_administrative_orientation": {},
  "evaluation_reception_profile": {},
  "deliberation_style": {},
  "preferred_explanation_format": {},
  "policy_interest_areas": {},
  "changeability": {},
  "document_tolerance": {},
  "jargon_reaction": {},
  "chat_behavior": {},
  "knowledge_limits": {}
}
```

### source_basis / calibration_status

由来と較正状態を示すメタ情報。

- `source_basis`: どのような根拠で拡張属性を付与したか
- `calibration_status`: 外部調査や実データに対して較正済みか

現行データでは、主に研究用ルールで派生させた属性として管理している。

### age_and_life_stage_profile

年齢と生活段階を分析しやすくする。

主な項目:

- `age_band_detail`
- `estimated_age`
- `life_stage`
- `student_status`
- `employment_entry_stage`
- `retirement_status`
- `voting_eligibility`
- `first_time_voter`
- `voting_experience`
- `caregiving_status`
- `care_receiving_status`
- `mobility_constraint`
- `digital_access_level`
- `future_orientation`

### gendered_life_context

性別役割、ケア責任、生活上のアクセス障壁を表す。

主な項目:

- `gender_identity_detail`
- `gender_role_experience`
- `care_responsibility`
- `childcare_responsibility`
- `eldercare_responsibility`
- `household_economic_responsibility`
- `work_family_conflict`
- `community_gender_role_pressure`
- `policy_access_barriers_related_to_gender`
- `gender_related_policy_sensitivity`

### derived_profile

社会経済的属性と行政接触の基礎変数。

主な項目:

- `education_level`
- `education_field`
- `occupation_sector`
- `occupation_type`
- `employment_status`
- `income_level`
- `household_type`
- `marital_status`
- `has_children`
- `local_rootedness`
- `migration_experience`
- `community_participation`
- `public_sector_experience`
- `policy_literacy`
- `administrative_contact_frequency`

このレイヤーは、可視化でよく使う。たとえば政策リテラシー別、公共部門勤務経験別、地域根付き度別の反応比較ができる。

### civic_and_administrative_orientation

行政や公共サービスに対する姿勢。

主な項目:

- `administrative_trust_basis`
- `view_of_bureaucracy`
- `view_of_local_government`
- `view_of_central_government`
- `citizen_participation_orientation`
- `public_service_expectation`
- `tax_burden_sensitivity`
- `anti_elite_sensitivity`
- `local_autonomy_orientation`

### evaluation_reception_profile

評価報告書をどの観点で読むかを表す中心的レイヤー。

主な項目:

- `accountability_expectation`
- `performance_information_preference`
- `outcome_orientation`
- `process_fairness_sensitivity`
- `cost_effectiveness_sensitivity`
- `equity_sensitivity`
- `local_context_sensitivity`
- `implementation_realism_sensitivity`
- `participation_expectation`
- `transparency_expectation`
- `sensitivity_to_indicator_design`
- `sensitivity_to_target_setting`
- `sensitivity_to_evaluation_use`

このレイヤーにより、同じ報告書でも「成果指標に反応する住民」「費用対効果に反応する住民」「地域文脈の説明に反応する住民」を分けて分析できる。

### deliberation_style

情報処理・熟議スタイル。

- `evidence_preference`
- `need_for_cognitive_closure`
- `patience_for_long_documents`
- `tolerance_for_ambiguity`
- `preference_for_comparison`
- `tendency_to_check_sources`

### preferred_explanation_format

どの説明形式を好むか。

- `numbers`
- `graphs`
- `local_examples`
- `personal_stories`
- `expert_opinion`
- `plain_language_summary`
- `cost_benefit_information`
- `before_after_comparison`
- `benchmark_comparison`

### policy_interest_areas

政策分野への関心を `high`, `medium`, `low` のリストで持つ。

例:

```json
{
  "high": ["公共交通", "高齢者福祉", "医療"],
  "medium": ["教育", "観光", "防災"],
  "low": []
}
```

### changeability

反論や追加情報によって意見が変わりやすいか。

- `openness_to_counterargument`
- `persuadability_by_data`
- `persuadability_by_local_examples`
- `persuadability_by_expert_authority`
- `persuadability_by_peer_voice`
- `resistance_to_elite_language`

### document_tolerance

行政文書の読みやすさ・耐性。

- `patience_for_long_reports`
- `tolerance_for_jargon`
- `need_for_summary`
- `sensitivity_to_visual_clarity`
- `frustration_with_vague_goals`
- `frustration_with_missing_baseline`
- `frustration_with_missing_outcomes`

### jargon_reaction

専門用語への反応。

- `policy_evaluation_terms`
- `administrative_jargon`
- `financial_terms`
- `statistical_terms`
- `prefers_explanation_of_terms`

### chat_behavior

仮想インタビューや追加質問での応答スタイル。

- `tone`
- `typical_response_length`
- `asks_followup_questions`
- `emotional_directness`
- `uses_local_examples`
- `uses_personal_experience`
- `avoids_specialist_terms_unless_prompted`

### knowledge_limits

モデルがペルソナとして振る舞う際の制約。

- `resident_not_policy_expert`
- `avoid_unprompted_technical_terms`
- `use_only_persona_background_and_given_policy_text`
- `do_not_invent_local_facts`

これにより、ペルソナが政策専門家のように過剰に振る舞うことを抑制する。

## 04 geo: 地理正規化レイヤー

`expanded.basic_profile.specific_city` は生成時点では表記揺れや曖昧表現がありうるため、後処理で実在自治体へ正規化する。

主なフィールド:

```json
{
  "persona_id": "P0000001",
  "specific_city_raw": "長野県上田市",
  "prefecture": "長野県",
  "municipality": "上田市",
  "municipality_code": "202037",
  "representative_lat": 36.4019,
  "representative_lon": 138.2491,
  "geo_match_status": "matched",
  "geo_repair_needed": false,
  "coordinate_level": "municipality_representative",
  "coordinate_source": "municipality_master"
}
```

このレイヤーにより、地図上での分布、自治体別反応、都市部・中山間地域・観光地などの地域類型分析が可能になる。

## シミュレーション入力での使い方

大規模シミュレーションでは、各prompt input行にペルソナ情報を埋め込む。実装上は、以下のような考え方で要約・選択して渡す。

1. `nucleus`: シミュレーション設計上の基本属性として保持
2. `expanded`: ペルソナの生活文脈、価値観、情報環境、語り口として使用
3. `extension`: 政策リテラシー、行政信頼、説明選好などの分析用属性として使用
4. `geo`: 地域分析、可視化、自治体別比較に使用

出力側では、反応スコアと `persona_link` を使って、「どの属性・生活文脈が、どの反応に接続したか」を後から分析できる。

## データ設計上のポイント

### 文章レイヤーと構造化レイヤーを分ける

`expanded` は人間らしい生活文脈を持たせるための文章レイヤーである。一方、`extension` は統計・可視化・層別分析のための構造化レイヤーである。両者を分けることで、生成時の豊かさと分析時の比較可能性を両立している。

### 不確実な情報を過剰に断定しない

`extension` の一部項目は、ルールベースで安全に派生できるものだけを埋める。判断が難しい場合は、unknown/null相当の扱いにして、過剰な属性付与を避ける。

### 地名は実在自治体に正規化する

地理分析を行うため、`specific_city` は架空地名や曖昧表現のままにしない。実在自治体に照合し、自治体コードと代表座標を付ける。

### promptでは必要量だけを渡す

全フィールドを常に長文で渡すとコストが増えるため、シミュレーションの目的に必要な項目を中心に、簡潔に整形して渡す。分析用の完全な属性は外部データとして保持する。
