# 数据视角

> 从「系统里有哪些数据 / 数据怎么流 / 数据缺什么」三个问题切入,把 Satellite Agent 当成一个数据资产来盘点。可视化版见 [`data-viz.html`](./data-viz.html)。

---

## 1. 数据全景

Satellite Agent 当前所有数据资产分四类:

| 类别 | 文件 / 表 | 行数 | 用途 |
|---|---|---:|---|
| **持久化** | `events` (SQLite) | 0 (运行后增长) | 入库事件 + 分类结果 |
| **持久化** | `companies` | 6 | 代表公司画像 + 反哺主线 |
| **持久化** | `market_model` | 84 | 4 主线 × 7 年 × 3 情景空间估算 |
| **持久化** | `thesis_state` | 0 | thesis 滚动评分 (Phase 2+) |
| **静态种子** | `seed.SEED_MARKET_MODEL` | 84 | 上述 `market_model` 初始化源 |
| **静态种子** | `seed.SEED_COMPANIES` | 6 | 上述 `companies` 初始化源 |
| **样本集** | `samples/events.jsonl` | 8 | demo 灌入用 (smoke test) |
| **样本集** | `samples/labeled_regression.jsonl` | 30 | 合成回归集 (100% 三项全过) |
| **样本集** | `samples/labeled_real.jsonl` | 25 | 真实回归集 (64% 三项全过) |
| **词典** | `ontology.THREAD_KEYWORDS` | 4 类共 102 词 | 主线分类 |
| **词典** | `ontology.SCENARIO_KEYWORDS` | 6 类共 51 词 | 场景分类 |
| **词典** | `ontology.DIMENSION_KEYWORDS` | 6 类共 89 词 | 维度分类 |
| **词典** | `ontology.POSITIVE_KEYWORDS` | 61 | thesis 正向极性 |
| **词典** | `ontology.NEGATIVE_KEYWORDS` | 50 | thesis 负向极性 |
| **词典** | `classifier._NEGATION_PAIRS` | 12 | 否定句反义对 |

**总词典规模 365 词 + 12 反义对**。持久化层默认空,跑 `satagent init` 后写入 84 行市场模型 + 6 家公司。

## 2. Schema 现状(`db.py`)

### 2.1 `events` — 事件主表

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `id` | INTEGER PK | ✓ | 自增 |
| `title` | TEXT | ✓ | 事件标题 |
| `content` | TEXT | ✓ | 正文 |
| `source` | TEXT | | 来源(媒体 / 公司 / 政策机构) |
| `url` | TEXT | | 原文链接 |
| `occurred_at` | TEXT | ✓ | ISO8601 时间 |
| `created_at` | TEXT | ✓ | 入库时间(默认 CURRENT_TIMESTAMP) |
| `threads` | TEXT (JSON) | | 命中主线数组 |
| `scenarios` | TEXT (JSON) | | 命中场景数组 |
| `dimensions` | TEXT (JSON) | | 命中维度数组 |
| `thesis_impact` | TEXT | | 增强 / 削弱 / 中性 |
| `confidence` | REAL | | [0, 1] |
| `next_indicators` | TEXT (JSON) | | 下一步跟踪指标 |
| `companies` | TEXT (JSON) | | 反哺命中公司 |
| `order_amount_cny_yi` 🆕 | REAL | | 订单金额(亿元),NULL = 无数字 |
| `capex_cny_yi` 🆕 | REAL | | 资本开支 |
| `opex_cny_yi` 🆕 | REAL | | 运营开支 |
| `time_window` 🆕 | TEXT | | ISO8601 区间,e.g. `2026-04..2026-12` |
| `customer_subject` 🆕 | TEXT | | 客户主体 |
| `numeric_evidence` 🆕 | TEXT (JSON) | | 解析痕迹 |

**索引**:`idx_events_occurred(occurred_at)`、`idx_events_impact(thesis_impact)`、`idx_events_order_amount(order_amount_cny_yi)`

### 2.2 `companies` — 公司卡片

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `id` | INTEGER PK | ✓ | |
| `name` | TEXT UNIQUE | ✓ | 公司名 |
| `thread` | TEXT | | 所属主线 |
| `products` | TEXT (JSON) | | 代表产品 |
| `customers` | TEXT (JSON) | | 主要客户 |
| `revenue_mapping` | TEXT | | **预留**(订单 → 主线 → 财报科目映射,Phase 2 写入) |
| `moat` | TEXT | | 护城河 |
| `risk` | TEXT | | 风险 |
| `score` | REAL | | 综合评分 |
| `aliases` | TEXT (JSON) | | 别名(用于反哺匹配) |
| `orders` 🆕 | TEXT (JSON) | | 历次订单 `[{amount_cny_yi, customer, date, source}]` |
| `peer_rank` 🆕 | INTEGER | | 同主线当前排名 |
| `peer_rank_delta` 🆕 | INTEGER | | 本周排名变化 |
| `last_quarter_revenue_cny_yi` 🆕 | REAL | | 最近一期营收 |

### 2.3 `market_model` — 市场空间

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `id` | INTEGER PK | ✓ | |
| `thread` | TEXT | ✓ | 主线 |
| `year` | INTEGER | ✓ | 2025-2031 |
| `scenario` | TEXT | ✓ | conservative / base / optimistic |
| `value_cny_yi` | REAL | ✓ | 单位:亿元 |
| `note` | TEXT | | 标注(默认 "seed v0.1 (placeholder)") |

**唯一约束**:`(thread, year, scenario)`

### 2.4 `thesis_state` — thesis 滚动评分

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `id` | INTEGER PK | ✓ | |
| `thread` | TEXT | ✓ | 主线 |
| `statement` | TEXT | ✓ | thesis 文本 |
| `score` | REAL | ✓ | 实时得分(默认 0) |
| `updated_at` | TEXT | ✓ | 最近更新 |

**当前为空表**。Phase 2 `Tracking Agent` 上线后写入,周报聚合时读取。

## 3. 静态种子数据

### 3.1 市场模型 — 84 行(4 主线 × 7 年 × 3 情景)

2025 → 2031 各主线 base 情景增长倍数:

| 主线 | 2025 (亿元) | 2031 (亿元) | 倍数 |
|---|---:|---:|---:|
| 核心网 | 80 | 650 | **×8.1** |
| 终端 | 60 | 1,150 | **×19.2** |
| 芯片 | 18 | 430 | **×23.9** |
| 运营支撑 | 35 | 290 | **×8.3** |

合计 base 2031 ≈ **2,520 亿元** / conservative ≈ 1,205 亿 / optimistic ≈ 4,820 亿。

⚠️ 全部为 MVP 占位估算。Phase 2 抓取上线后,真实 capex / opex / 订单数字应**滚动覆盖**这张表,而非追加。

### 3.2 公司卡片 — 6 家

| 公司 | 代码 | 主线 | 代表产品 | 客户 |
|---|---|---|---|---|
| 上海瀚讯 | 300762 | 核心网 | 宽带核心网设备 / 信关站 | 运营商 / 总体单位 |
| 震有科技 | 688418 | 核心网 | 5G NTN 核心网 / 信关站方案 | 总体单位 / 运营商 |
| 华力创通 | 300045 | 终端 | 北斗+天通双模终端 / 模组 | 军工 / 应急 / 政企 |
| 海格通信 | 002465 | 终端 | 卫星通信终端 / 无线电基带 | 军工 / 政企 |
| 复旦微电 | 688385 | 芯片 | 基带 / 射频 / FPGA | 终端厂商 / 军工 |
| 中国卫通 | 601698 | 运营支撑 | 卫星通信服务 / 高通量运营 | 三大运营商 / 广电 / 民航 |

主线覆盖度:核心网 2 / 终端 2 / 芯片 1 / 运营支撑 1。**仍偏少**——Phase 2 需扩展到至少 20 家 (含星网 / 时空道宇 / 国电高科 / 中国电信卫星 / 中科星图 / 信科移动 等)。

## 4. 样本数据集

### 4.1 `samples/events.jsonl` — 8 条 demo

字段:`title` / `content` / `source` / `occurred_at` / `next_indicators`。用于 `ingest-file` 一键灌入演示。无 `expected.*`,**不能**做回归。

### 4.2 `samples/labeled_regression.jsonl` — 30 条合成回归集

| 维度 | 分布 |
|---|---|
| threads | 终端 16 · 核心网 9 · 芯片 8 · 运营支撑 8 |
| thesis | 增强 19 · 削弱 10 · 中性 1 |
| classifier 表现 | **100% 三项全过 / macro F1 1.000** |

**合成集 100% 不代表上线表现**——见 `regression.md §6`。

### 4.3 `samples/labeled_real.jsonl` — 25 条真实回归集

| 维度 | 分布 |
|---|---|
| 时间窗 | 2024-12 → 2026-04(2025-Q3 ~ 2026-Q2 集中,2026-04 共 6 条) |
| threads | 终端 12 · 运营支撑 9 · 核心网 7 · 芯片 2 |
| thesis | 增强 17 · 削弱 6 · 中性 2 |
| 多主线 | 单主线 16 / 双主线 7 / 无主线 2 (公司澄清类) |
| 来源域 | cww.net.cn (7) · stcn.com (3) · 新浪财经 (2) · 知乎专栏 (2) · 其余分散 |
| 来源类型 | 政策(工信部 / 商务部 / 上交所) · 公司公告 · 财经媒体 · 行业研报 |
| classifier 表现 | **64% 三项全过 / macro F1 0.875 / thesis 准确率 92%** |

每条样本含 `source_url`,可追溯到原始公开报道。

## 5. 关键词数据(`ontology.py`)

### 5.1 主线词典(4 类 / 共 102 词)

| 主线 | 词典规模 | 例词 |
|---|---:|---|
| 核心网 | 26 | 5G NTN / 信关站 / 核心网 / 透明转发 / 端到端打通 |
| 终端 | 19 | 卫星终端 / 双模终端 / 手机直连卫星 / 终端模组 |
| 芯片 | 22 | 基带芯片 / 射频芯片 / FPGA / 在轨验证 / 卫星 SoC |
| 运营支撑 | 35 | 经营许可 / 卫星通信服务 / 牌照 / 业务许可 / 试点经营 |

### 5.2 场景词典(6 类 / 共 51 词)

低空 9 · 车载 10 · 海事航空 10 · 工业 IoT 9 · 应急 8 · 具身智能 5

### 5.3 维度词典(6 类 / 共 89 词)

技术 13 · 产品 12 · 市场空间 11 · 商业模式 10 · 公司竞争力 14 · 风险 29

### 5.4 极性词典 + 反义对

- **POSITIVE_KEYWORDS**:61 词(中标 / 通过 / 完成 / 印发 / 颁发 / 出台 / 推动 / 配齐 …)
- **NEGATIVE_KEYWORDS**:50 词(下滑 / 警示 / 推迟 / 延期 / 招标失败 / 监管警示 …)
- **NEGATION_PAIRS**:12 对(未中标→中标 / 未发布→发布 / 招标失败→中标 …)

## 6. 一条事件的数据流

```
原文(标题+正文)
   ↓
classify(text)                      ← ontology 词典做 hit 计数
   │── threads (主线命中)
   │── scenarios (场景)
   │── dimensions (维度)
   │── thesis_impact + confidence  ← POS/NEG 计数 + 反义对扣减
   │── evidence (命中词)
   ↓
match_companies(text)               ← aliases 反向匹配
   ↓
enrich_with_company_threads()       ← 公司主线追加到 threads (弱信号待改造)
   ↓
insert_event() → SQLite events 表   ← JSON 数组直接落盘
   ↓
weekly_report(window=7d)            ← 聚合
   │── per-thread {strengthen/weaken/neutral, score, events}
   │── thesis_changes
   │── risks
   │── company_hits
   │── next_tracking
   ↓
render_markdown() | JSON 输出 → CLI / FastAPI
```

`classifier.confidence` 公式:`min(1.0, (2×threads + dimensions + 0.5×scenarios + 1.5×max(pos,neg)) / 10.0)`,主线零命中再 ×0.4 折扣。

## 7. 数据缺口 — Phase 3 决策层需要补什么

Phase 3 双视角输出(CEO 主驱动变量 + 投资仓位信号)要求数据层提供**数字字段**。**Schema 已于 2026-06-02 落地**(roadmap Item 5 完成),Phase 3a 决策层可以启动了。

| 决策输出 | 依赖字段 | 现状 |
|---|---|---|
| 主线评分(本周 vs 上周) | events.confidence + 时间窗 | ✅ 已有(Phase 1) |
| 主驱动变量识别 | events 的 capex / opex / 订单金额 | ✅ schema 落地, 待 Phase 2 抓取填值 |
| 公司相对位势矩阵 | companies.orders + revenue_mapping + peer_rank | ✅ schema 落地, orders 已种 1 条/家示例 |
| 市场模型动态修正 | 真实 capex / opex 聚合 → market_model 更新 | ⏳ 修正管线待 Phase 3b |
| 仓位调节信号 + 证据链 | 至少 4 周的主线评分 + 公司订单变化 | ⏳ 时间维度尚未累积 |

**已落地的 schema 改动**(`db.py` SCHEMA + `_MIGRATIONS` + `db.migrate_schema()` 幂等升级):

```sql
-- events 加 6 个数字字段
ALTER TABLE events ADD COLUMN order_amount_cny_yi REAL;        -- 订单金额(亿元), NULL = 无数字
ALTER TABLE events ADD COLUMN capex_cny_yi        REAL;        -- 资本开支
ALTER TABLE events ADD COLUMN opex_cny_yi         REAL;        -- 运营开支
ALTER TABLE events ADD COLUMN time_window         TEXT;        -- ISO8601 区间 e.g. "2026-04..2026-12"
ALTER TABLE events ADD COLUMN customer_subject    TEXT;        -- 客户主体
ALTER TABLE events ADD COLUMN numeric_evidence    TEXT;        -- JSON · 解析痕迹

-- companies 加 4 个新字段
ALTER TABLE companies ADD COLUMN orders                      TEXT;     -- JSON · 历次订单 [{amount, customer, date, source}]
ALTER TABLE companies ADD COLUMN peer_rank                   INTEGER;  -- 同主线当前排名
ALTER TABLE companies ADD COLUMN peer_rank_delta             INTEGER;  -- 本周排名变化
ALTER TABLE companies ADD COLUMN last_quarter_revenue_cny_yi REAL;     -- 最近一期营收
```

进入路径:

- 全新 DB:`db.py` 里的 SCHEMA 直接建好;
- 老 DB:`db.init_db()` 内部调用 `migrate_schema()`,逐列 `ALTER TABLE ADD COLUMN`,捕获重复列异常实现幂等。

接口透传:

- CLI:`satagent ingest --order-amount 5.2 --customer "某军种" --time-window "2026-04..2026-12"`
- FastAPI:`POST /events/ingest` 接受 `numeric: { order_amount_cny_yi, capex_cny_yi, opex_cny_yi, time_window, customer_subject, numeric_evidence }`
- 批量:`ingest-file` 的 JSONL 每行可加 `numeric` 子对象透传

`thesis_state` 表仍为空,Phase 2 Tracking Agent 上线时配合写入。

## 8. 数据质量基线

### 8.1 真实集 v0 vs v1(词典扩展前后)

| 指标 | v0 | v1 | Δ |
|---|---:|---:|---:|
| 三项全过通过率 | 40.0% | **64.0%** | +24 pp |
| thread exact-match | 56.0% | 64.0% | +8 pp |
| thesis 准确率 | 64.0% | **92.0%** | +28 pp |
| confidence in-band | 84.0% | **100.0%** | +16 pp |
| macro F1 (thread) | 0.822 | **0.875** | +0.053 |
| 平均置信度 | 0.618 | 0.721 | +0.103 |

### 8.2 v1 per-thread P / R / F1

| thread | TP | FP | FN | P | R | F1 |
|---|---:|---:|---:|---:|---:|---:|
| 核心网 | 7 | 4 | 0 | 0.64 | 1.00 | 0.78 |
| 终端 | 12 | 2 | 0 | 0.86 | 1.00 | 0.92 |
| 芯片 | 2 | 0 | 0 | 1.00 | 1.00 | 1.00 |
| 运营支撑 | 8 | 3 | 1 | 0.73 | 0.89 | 0.80 |

### 8.3 v1 残留 9 条失败 case 分类

- **关键词漂移 over-fire** 5 条 → 必须 LLM 兜底
- **对冲句**(增长+亏损 / 拳头产品类描述) 2 条 → 必须 LLM 兜底
- **召回边界**(主线命中过严) 2 条 → 必须 LLM 兜底

详见 [`regression-real.md` §4](./regression-real.md#4-失败-case-根因拆解v0-15-条--v1-9-条)。

## 9. 对数据层的修订(下一步)

按 [`roadmap.md` §5](./roadmap.md#5-当前优先级建议) 顺序:

1. ~~**schema 扩展**(Item 5,1-2 天)~~ ✅ **已完成 2026-06-02** — `events` 加 6 个数字字段,`companies` 加 4 个;migration 幂等落档 + 23/23 tests
2. **公司卡片扩容**(配合 Item 5)— 从 6 家扩到 20 家,补星网 / 时空道宇 / 国电高科 / 中国电信卫星 / 中科星图 / 信科移动 等
3. **真实集扩容到 50 条**(Phase 2 抓取上线后,用真实数据扩样)
4. **市场模型滚动修正机制**(Phase 3b)— 抓取层每写入 N 条带 capex / opex 的事件,触发对应 thread × year 的 market_model 重算
5. **thesis_state 写入**(Phase 2)— 每条事件入库时按主线累计 confidence × impact_sign

下一步开 Phase 3a 决策层原型(主驱动变量识别 + 仓位信号)就可以开始,数据层 ready。

---

> **数据免责声明** — 公司卡片、市场模型为 MVP 占位估算;真实样本集所引用的新闻 / 公告 / 政策均来自公开渠道(`source_url` 可追溯)。**不构成投资判断**。
