291 lines
9.6 KiB
Markdown
291 lines
9.6 KiB
Markdown
# 正念 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`):`0–1`
|
||
* `profile_answered`:各題是否作答(用于区分“跳过” vs “明确选择”)
|
||
* `stage/emotion/context/need`:`true/false`
|
||
|
||
`profile_confidence` 建議規則(V1.1 默認,可調參):
|
||
|
||
* 問卷剛完成:`conf_U = 1.0`
|
||
* 隨時間衰減(避免用過期狀態強個性化推送):
|
||
* 0–7 天:`conf_U = 1.0`
|
||
* 7–30 天:線性衰減到 `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 时间衰减得到(0–1)
|
||
* `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(當下情緒)— 連續型(0–1)
|
||
|
||
### 問卷題目
|
||
|
||
**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(影響來源)— 離散型
|
||
|
||
### 問卷題目
|
||
|
||
**What’s 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.2(low / 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 / need;mom_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 的動態修正
|