Files
mindfulness/设计说明文档/客戶端問卷打分規則.md
2026-02-02 11:22:35 +08:00

291 lines
9.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 正念 APP用戶畫像打分標準User Profile Scoring Spec · V1
> **用途**
> 本文件定義「問卷完成後如何將答案轉換為可計算的用戶畫像User Profile
> 該畫像將用於後續的 **個性化內容推薦 / 推送排序**。
>
> **設計原則**
>
> * 不做心理診斷,只描述「此刻允許被如何對待」
> * 區分 **身份(離散)** 與 **狀態(連續)**
> * 允許「通用」與「高個性化」內容並存
---
## 一、整體結構概覽
問卷完成後,系統需生成一個用戶畫像 **U**,包含四個維度:
1. **mom_stage**(母職階段|離散型)
2. **emotion**(當下情緒|連續型)
3. **context**(影響來源|離散型)
4. **need**(當下最需要的支持|離散型)
該畫像將與內容畫像 **Cᵢ** 進行匹配,計算推薦分數。
### V1.1 工程補充欄位(用於不確定性控制/可觀測)
> 目的:在 Push 等高風險場景,當用戶畫像可能過期或不可靠時,自動「降個性化 / 降風險」。
建議在 U 中補充以下元資訊(不影響原有四維度打分):
* `profile_version`:如 `"v1.1"`
* `profile_source``questionnaire`(後續可擴展 `behavior` / `mixed`
* `profile_generated_at`ISO8601 時間戳
* `profile_confidence`= `conf_U``01`
* `profile_answered`:各題是否作答(用于区分“跳过” vs “明确选择”)
* `stage/emotion/context/need``true/false`
`profile_confidence` 建議規則V1.1 默認,可調參):
* 問卷剛完成:`conf_U = 1.0`
* 隨時間衰減(避免用過期狀態強個性化推送):
* 07 天:`conf_U = 1.0`
* 730 天:線性衰減到 `0.7`
* 30 天以上:`conf_U = 0.5`(除非用戶重新做問卷或有行為信號更新)
#### V1.2:支持“可跳过题目”的画像输出与置信度(工程必读)
> 前提:问卷允许用户跳过任意题目(包括 mom_stage / emotion / context / need
> 目标:保证任何情况下都能生成“可计算的 U”并在不确定时自动降个性化/降风险。
**V1.2 输出原则:**
* **mom_stage 跳过**:按安全策略处理为 `unknown`(即 `U.stage.unknown=1`),同时 `profile_answered.stage=false`
* **emotion 跳过**`U.emotion_score` 置为缺省(建议直接不输出该字段或输出 `null`),同时 `profile_answered.emotion=false`
* **context 跳过**`U.context` 输出为空对象 `{}`,同时 `profile_answered.context=false`
* **need 跳过**`U.need` 输出为空对象 `{}`,同时 `profile_answered.need=false`
> 说明:
>
> * 之所以“mom_stage 跳过也当作 unknown”是为了在 Push 等高风险场景优先保证不冒犯unknown 语义:不希望被母职身份定义)。
> * emotion/context/need 跳过不强行填默认值,避免制造“伪精确画像”;改由推荐算法在打分时走“通用值 + 不确定性惩罚”见「个性化推荐算法规则」V1.2 补充)。
**V1.2 `conf_U` 计算(在 V1.1 时间衰减基础上叠加“作答完整度”):**
定义:
* `conf_time`:按 V1.1 时间衰减得到01
* `answered_count = Σ I[profile_answered.* = true]`,总题数 `total_questions = 4`
* `completion = answered_count / total_questions`
* `completion_factor = 0.5 + 0.5 * completion`(答得越少越不确定,但仍保留基础信息)
则:
* `conf_U = clamp(conf_time * completion_factor, 0.2, 1.0)`
> Push 推送時若 `conf_U` 偏低,推薦系統需啟用 `P_uncertainty` 並限制 `personalization_power` 上限見「個性化推薦算法規則」V1.1)。
---
## 二、mom_stage母職階段— 離散型
### 問卷題目
**Which stage of motherhood are you in?**
選項與對應標籤:
* Pregnant / Preparing → `mom_stage: expecting`
* Parenting → `mom_stage: parenting`
* Prefer not to say → `mom_stage: unknown`
### 打分方式One-Hot
| 欄位 | 值 |
| ----------------- | ----- |
| U.stage.expecting | 1 或 0 |
| U.stage.parenting | 1 或 0 |
| U.stage.unknown | 1 或 0 |
> **說明**
>
> * `mom_stage` 是「身份 / 階段」,不是強度,不做連續軸線
> * `unknown` 的語義是:**不希望被母職身份定義**(不是「沒有孩子」)
> * 若该题被跳过:按安全策略输出 `unknown`,同时 `profile_answered.stage=false`
### 推送原則(高層)
* `unknown`:避免任何「你應該怎麼當媽媽」的內容
* `expecting`:避免「已經有孩子」的育兒細節
* `parenting`:可接受具體育兒壓力、現實困境相關內容
---
## 三、emotion當下情緒— 連續型01
### 問卷題目
**How are you feeling right now?**
### 映射為數值軸(能量/情緒穩定度)
| 選項 | tag | emotion_score |
| ----------- | -------------------- | ------------- |
| Low | emotion: low | 0.0 |
| Overwhelmed | emotion: overwhelmed | 0.2 |
| Tired | emotion: tired | 0.4 |
| Okay | emotion: neutral | 0.6 |
| Calm | emotion: calm | 0.8 |
| Joyful | emotion: joyful | 1.0 |
生成:`U.emotion_score ∈ [0,1]`;若该题跳过则输出 `null`(或不输出该字段),并通过 `profile_answered.emotion=false` 表示“未作答”
### 語義說明
* 這不是「快樂程度」,而是 **可承受刺激與吸收內容的能力**
* 分數越低,內容越需要「減壓、陪伴、允許停下」
* 分數越高,才適合「慶祝、提醒珍惜」
---
## 四、context影響來源— 離散型
### 問卷題目
**Whats been influencing how you feel?**
| 選項 | tag |
| ------------- | --------------------- |
| Family | context: family |
| Work or study | context: work |
| Relationship | context: relationship |
| Friends | context: friends |
| Health | context: health |
### 打分方式One-Hot
| 欄位 | 值 |
| ----------------------------------------------------- | ----- |
| U.ctx.family / work / relationship / friends / health | 1 或 0 |
> 若该题被跳过:`U.context` 输出为空对象 `{}`,同时 `profile_answered.context=false`
### 語義說明
* context **不是情緒**,而是情緒的「觸發場景」
* 用於提升內容共感(語境命中),而非硬性過濾
---
## 五、need最需要的支持— 離散型(最關鍵)
### 問卷題目
**What kind of support do you need most right now?**
| 選項 | tag |
| ------------------ | ------------------------ |
| Emotional support | need: emotional_support |
| Parenting pressure | need: parenting_pressure |
| Self-worth | need: self_worth |
| Anxiety relief | need: anxiety_relief |
| Rest & balance | need: rest_balance |
### 打分方式One-Hot
| 欄位 | 值 |
| ------------------------------------------------------------------------------------------ | ----- |
| U.need.emotional_support / parenting_pressure / self_worth / anxiety_relief / rest_balance | 1 或 0 |
> 若该题被跳过:`U.need` 输出为空对象 `{}`,同时 `profile_answered.need=false`
### 語義說明
* `need`**推薦權重最高的維度**
* 表示「她現在最缺的是哪一種心理資源」
---
## 六、跨維度約束Hard Rules
以下規則在推薦時 **優先於任何分數計算**
### 核心禁推規則V1.2
1. **mom_stage = unknown**
* ❌ 禁推:**高个性化**育儿压力内容(避免“把她当妈妈/正在育儿”对话)
* 判定条件与推荐算法一致V1.2`Cᵢ.need_suitability[parenting_pressure]=1``Cᵢ.personalization_power=1`
2. **mom_stage = parenting**
* ❌ 禁推:明確懷孕 / 孕期 / 胎動等內容
3. **emotion_score ≤ 0.2low / overwhelmed**
* ❌ 禁推高能量慶祝型joyful 調性)內容
> 原則:
>
> * 這些不是「不準」,而是「會造成反感或退出」
---
## 七、用戶畫像最終輸出結構(示例)
```json
{
"profile_version": "v1.1",
"profile_source": "questionnaire",
"profile_generated_at": "2026-01-30T00:00:00Z",
"profile_confidence": 1.0,
"profile_answered": {
"stage": true,
"emotion": true,
"context": true,
"need": true
},
"stage": {
"expecting": 0,
"parenting": 1,
"unknown": 0
},
"emotion_score": 0.4,
"context": {
"work": 1
},
"need": {
"rest_balance": 1
}
}
```
### 跳过题目时的输出示例V1.2
> 示例:用户跳过 emotion / context / needmom_stage 也跳过。
```json
{
"profile_version": "v1.2",
"profile_source": "questionnaire",
"profile_generated_at": "2026-01-30T00:00:00Z",
"profile_confidence": 0.5,
"profile_answered": {
"stage": false,
"emotion": false,
"context": false,
"need": false
},
"stage": {
"unknown": 1
},
"emotion_score": null,
"context": {},
"need": {}
}
```
---
## 八、設計總結給產品工程AI Reviewer
* **mom_stage / context / need**:描述「你現在允許我用什麼身份、從哪個角度對你說話」
* **emotion_score**:描述「你現在能承受多強的刺激與建議」
* 推薦的本質不是猜你是誰,而是 **避免用錯語氣對你說話**
> 本文件為 V1後續可疊加
>
> * 多選 context / need
> * 行為信號(點擊、收藏)對 emotion 的動態修正