Skip to content

Latest commit

 

History

History
868 lines (675 loc) · 38.1 KB

File metadata and controls

868 lines (675 loc) · 38.1 KB

CatBTI(猫BTI)· 测一测你是什么猫 — 数据分析报告

定位CatBTI — 面向「人类云吸猫」语境的自嗨式猫格问卷(干饭、贴贴、跑酷、装睡、巡领地),与临床/职业测评及真实动物诊断无关。
分析日期:2026-04-12(文档与仓库 data/src/ 对齐升级)

数据资产(仓库真源)

文件 作用
data/config.json 展示文案(display)、分级阈值(scoring.levelThresholds)、猫薄荷门控 ID与触发值(catnipGate)、理论最大距离等元数据
data/dimensions.json 五模型(models)、维度顺序(order)、各维 L/M/H 文案(definitions
data/types.json 标准 25 型(standard:含 pattern / cn / intro / desc);特殊类型(specialHHHHSIAMNIP
data/questions.json 主问卷(main);门控与追问(specialcatnip_gate_q1catnip_gate_q2

运行时加载src/main.js 并行 fetch 上述四份 JSON → calcDimensionScores(answers, questions.main)scoresToLevels(..., config.scoring.levelThresholds)determineResult(..., { isCatnipHigh, maxDistance: config.scoring.maxDistance, fallbackThreshold: config.scoring.fallbackThreshold })


目录

  • 数据资产与运行时:见文首「数据资产(仓库真源)」
  1. 测试结构总览
  2. 维度分析
  3. 类型空间分析
  4. 特殊机制
  5. 评分算法详解
  6. 定制指南
  7. 实现与配置一致性说明

1. 测试结构总览

1.1 五大模型 (5 Models)

CatBTI 测试建立在五个「猫宅版」模型之上(dimensions.jsonmodels),每个模型 3 个维度,共 15 维。下表第三列为数据里的 字段(整活向说明,非学术定义):

模型代码 中文名称 (摘自 dimensions.json 包含维度
S 本喵自恋模型 CatBTI 五模型之一:在镜子、体重秤和人类夸奖里,你如何看待「我这只猫」——猫版自尊与自洽。 S1, S2, S3
E 贴贴与独占模型 CatBTI 五模型之一:对同胞猫、狗、铲屎官——信任、投入、边界;养猫常见「独占像恋爱、分床像离婚」的情感算力全在这里。 E1, E2, E3
A 世界观模型 CatBTI 五模型之一:信不信人类的笑脸、愿不愿为规矩让路、以及你还信不信「今天会有加餐」——客厅三观。 A1, A2, A3
Ac 捕猎驱力模型 CatBTI 五模型之一:冲红点还是防吸尘器、扑得快还是观察十圈、开罐前是战神还是装死——落地姿势。 Ac1, Ac2, Ac3
So 巡领地社交模型 CatBTI 五模型之一:敢不敢见客、怎么躲洗澡、以及你在兽医面前和家里是不是同一只猫——社交运营成本。 So1, So2, So3

1.2 十五维度概览 (15 Dimensions)

每个维度均有三个水平等级(L / M / H)。下表为便于阅读的摘要;判分与完整措辞以 dimensions.jsondefinitions 为准。

维度 名称 L(低) M(中) H(高)
S1 自尊自信 严重自我怀疑 自信随境波动 内心稳定有数
S2 自我清晰度 自我认知模糊 偶尔被情绪干扰 对自身门儿清
S3 核心价值 偏重舒适安全 上进与躺平拉锯 目标/信念驱动
E1 依恋安全感 高警觉高焦虑 信任与试探交替 信任关系、不易受扰
E2 情感投入度 克制投入、门禁严 投入但留后手 全情投入
E3 边界与依赖 容易黏人 可调节型依赖 重视独立空间
A1 世界观倾向 防御性怀疑 观望型 善意信任
A2 规则与灵活度 偏自由灵活 该守则守 秩序感强
A3 人生意义感 意义感低 半开机状态 有方向感
Ac1 动机导向 避险为先 混合动机 成果成长驱动
Ac2 决策风格 决策犹豫 正常犹豫 果断不回头
Ac3 执行模式 拖延到死线 看时机发挥 强推进欲
So1 社交主动性 慢热被动 弹性社交 主动打开场子
So2 人际边界感 想亲近融合 看对象调节 边界感强
So3 表达与真实度 直接不绕 看气氛说话 分层发放真实感

1.3 问题结构 (30+2 Questions)

  • 主要题目:30 道,每个维度严格分配 2 道(共 15 维度 x 2 = 30)
  • 特殊题目:2 道猫薄荷门控题(catnip_gate_q1 + catnip_gate_q2)
  • 选项设计:主要题目每道 3 个选项,对应数值 1/2/3;catnip_gate_q1 有 4 个选项
  • 展示方式:30 道主题经 Fisher-Yates 随机打乱,catnip_gate_q1 随机插入其中

1.4 评分管道 (Scoring Pipeline)

用户答题(30+1/2道)
    |
    v
维度求和: 每维度 2 题之和 (范围 2~6)
    |
    v
分级映射: <=3 -> L, ==4 -> M, >=5 -> H
    |
    v
数值化: L=1, M=2, H=3 -> 15 维用户向量
    |
    v
曼哈顿距离: 与 25 个标准类型逐一比对
    |
    v
排序: distance ASC, exact_count DESC, similarity DESC
    |
    v
特殊规则覆写: SIAMNIP 覆盖 / HHHH 兜底
    |
    v
输出结果

1.5 人格类型总览

25 个标准类型(含模式串):

# 代码 中文名 模式串 维度和
1 LIHUA 狸花猫 HHH-HMH-MHH-HHH-MHM 41
2 RAGDOLL 布偶猫 HHH-HHM-HHH-HMH-MHL 40
3 EXOTIC 异国短毛猫 MHM-MMH-MHM-HMH-LHL 34
4 MAINE 缅因猫 HHH-HMH-MMH-HHH-LHL 38
5 BRITISH 英国短毛猫 MHM-HMM-HHM-MMH-MHL 35
6 SIAMESE 暹罗猫 HHL-LMH-LHH-HHM-LHL 33
7 ABY 阿比西尼亚猫 HHM-HMH-MMH-HHH-MHM 39
8 BENGAL 孟加拉豹猫 HMH-HHL-HMM-HMM-HLH 36
9 NORWEGIAN 挪威森林猫 MLH-LHL-HLH-MLM-MLH 29
10 VAN 土耳其梵猫 MMH-MHL-HMM-LMM-HLL 30
11 SPHYNX 斯芬克斯猫 HLM-MML-MLM-MLM-HLH 28
12 BIRMAN 伯曼猫 MMH-MMM-HML-LMM-MML 29
13 ORIENTAL 东方短毛猫 MLH-MHM-MLH-MLH-LMH 31
14 CORNISH 柯尼斯卷毛猫 LLH-LHL-LML-LLL-MLM 22
15 AMERICAN 美国短毛猫 HHL-HMH-MMH-HHM-LHH 37
16 RUSSIAN 俄罗斯蓝猫 HHL-HMH-MLH-MHM-LHH 35
17 ORANGE 中华田园橘猫 HHL-HLH-LMM-HHM-LHH 34
18 PERSIAN 波斯猫 MHL-MLH-LML-MML-LHM 27
19 JIANZHOU 四川简州猫 HHL-MLH-LMH-HHH-LHL 33
20 CHARTREUX 沙特尔猫 HHL-LLH-LLM-MML-LHM 27
21 MUNCHKIN 曼基康猫 LLM-LMM-LLL-LLL-MLM 20
22 EGYPTIAN 埃及猫 LML-LLH-LHL-LML-LHM 24
23 SAVANNAH 热带草原猫 MLL-LHL-LLM-MLL-HLH 24
24 BOMBAY 孟买猫 LLL-LLM-LML-LLL-LHM 20
25 HIMALAYAN 喜马拉雅猫 LLH-LHL-LML-LLL-MLL 21

维度和 = 模式串中所有维度数值之和(L=1, M=2, H=3),范围 15~45。该值越高表示类型在各维度上整体偏 H("高功能"端),越低则偏 L。

2 个特殊类型(无标准模式串):

代码 中文名 触发条件
HHHH 混血米克斯猫 最佳匹配相似度 < fallbackThreshold(默认 60)时强制兜底
SIAMNIP 暹罗猫(猫薄荷上头版) 猫薄荷门控第二题选对应该彩蛋的选项(见 questions.json)时激活

2. 维度分析

2.1 全类型 15 维展开矩阵

下表将 25 个标准类型的模式串逐维度展开,便于横向对比:

类型 S1 S2 S3 E1 E2 E3 A1 A2 A3 Ac1 Ac2 Ac3 So1 So2 So3
LIHUA H H H H M H M H H H H H M H M
RAGDOLL H H H H H M H H H H M H M H L
EXOTIC M H M M M H M H M H M H L H L
MAINE H H H H M H M M H H H H L H L
BRITISH M H M H M M H H M M M H M H L
SIAMESE H H L L M H L H H H H M L H L
ABY H H M H M H M M H H H H M H M
BENGAL H M H H H L H M M H M M H L H
NORWEGIAN M L H L H L H L H M L M M L H
VAN M M H M H L H M M L M M H L L
SPHYNX H L M M M L M L M M L M H L H
BIRMAN M M H M M M H M L L M M M M L
ORIENTAL M L H M H M M L H M L H L M H
CORNISH L L H L H L L M L L L L M L M
AMERICAN H H L H M H M M H H H M L H H
RUSSIAN H H L H M H M L H M H M L H H
ORANGE H H L H L H L M M H H M L H H
PERSIAN M H L M L H L M L M M L L H M
JIANZHOU H H L M L H L M H H H H L H L
CHARTREUX H H L L L H L L M M M L L H M
MUNCHKIN L L M L M M L L L L L L M L M
EGYPTIAN L M L L L H L H L L M L L H M
SAVANNAH M L L L H L L L M M L L H L H
BOMBAY L L L L L M L M L L L L L H M
HIMALAYAN L L H L H L L M L L L L M L L

2.2 各维度 L/M/H 分布统计

通过对上表逐列计数,得到以下分布(25 个类型,每维度 L+M+H=25):

维度 L 计数 M 计数 H 计数 众数 分布特征
S1 自尊自信 5 8 12 H 高自信类型占近半,低自信仅5个
S2 自我清晰度 8 4 13 H H 显著占优,M 最稀缺
S3 核心价值 10 5 10 L/H并列 两极分化,M 极少
E1 依恋安全感 9 7 9 L/H并列 高度两极化,中间态最少
E2 情感投入度 6 11 8 M M 为众数,分布相对均衡
E3 边界与依赖 7 5 13 H H 显著,类型设计倾向独立
A1 世界观倾向 10 7 8 L L 略多,怀疑型稍占优
A2 规则与灵活度 6 11 8 M M 为众数,灵活-规则均衡
A3 人生意义感 7 8 10 H 偏高意义感
Ac1 动机导向 7 8 10 H 偏成果驱动
Ac2 决策风格 7 10 8 M M 为众数,决策中等
Ac3 执行模式 8 8 9 H 三级近似均匀
So1 社交主动性 11 8 6 L 被动社交类型最多
So2 人际边界感 8 3 14 H H 极端占优,M 仅3个
So3 表达与真实度 7 8 10 H 分层表达偏多

2.3 维度分布洞察

高度偏态维度(某一级占比超过 50%):

  • So2 人际边界感:H 占 14/25(56%),说明大多数类型被设计为"重视边界"。M 仅 3 个(EXOTIC, ORIENTAL, BIRMAN),极为稀缺,意味着在 So2 上取到 M 的用户匹配范围极窄。
  • S2 自我清晰度:H 占 13/25(52%),大部分类型自我清晰度高。
  • E3 边界与依赖:H 占 13/25(52%),与 So2 类似,类型设计偏好"独立"端。

两极分化维度(L 和 H 接近,M 极少):

  • S3 核心价值:L=10, M=5, H=10。用户答中间值更容易落入 M,但只有 5 个类型在此维度为 M,形成"瓶颈效应"。
  • E1 依恋安全感:L=9, M=7, H=9。相对均衡但两极略突出。

偏 L 维度(低值类型更多):

  • So1 社交主动性:L=11, H=6。多数类型是社交被动型,反映了测试的目标用户群画像(可能偏内向的互联网用户)。
  • A1 世界观倾向:L=10, H=8。怀疑型比信任型多 2 个。

2.4 维度区分力分析

一个维度的"区分力"取决于其分布的均匀程度。越均匀,该维度对类型区分的贡献越大。用熵近似(取 L/M/H 比例)排序:

排名 维度 L:M:H 均匀度评价
1 Ac3 执行模式 8:8:9 极均匀,区分力最强
2 E2 情感投入度 6:11:8 较均匀
3 A3 人生意义感 7:8:10 较均匀
4 Ac1 动机导向 7:8:10 较均匀
5 So3 表达与真实度 7:8:10 较均匀
... ... ... ...
14 S2 自我清晰度 8:4:13 偏态显著
15 So2 人际边界感 8:3:14 最偏态,区分力最弱

结论:So2 和 S2 的区分力最弱 -- 大量类型在这两个维度上取值相同(H),因此这两个维度对最终匹配的影响较小。Ac3 和 E2 等分布均匀的维度对匹配结果的影响更为关键。


3. 类型空间分析

3.1 分析方法

将每个类型的 15 维模式串转化为数值向量(L=1, M=2, H=3),计算所有 C(25,2)=300 个类型对之间的曼哈顿距离:

$$d(A,B) = \sum_{i=1}^{15} |A_i - B_i|$$

理论距离范围:0(完全相同)至 30(每维度都相差 2)。

3.2 距离统计摘要

统计量
总配对数 300
最小距离 1
最大距离 24
理论最大 30

实际最大距离 24 仅达到理论上限的 80%,说明类型空间并未覆盖到极端对立的设计。

3.3 最近类型对(距离 <= 3)

以下 6 对类型的曼哈顿距离 <= 3,它们在 15 维空间中高度相似,用户很可能在它们之间"摇摆":

排名 类型对 距离 差异维度 分析
1 CORNISH vs HIMALAYAN 1 So3 (M vs L) 仅一个维度差 1 级,几乎不可区分
2 LIHUA vs ABY 2 S3 (H vs M), A2 (H vs M) 核心差异在价值感和规则感上各差一级
3 AMERICAN vs RUSSIAN 2 A2 (M vs L), Ac1 (H vs M) 差异在规则灵活度和动机导向
4 LIHUA vs MAINE 3 A2 (H vs M), So1 (M vs L), So3 (M vs L) 差异全在社交和规则微调
5 MAINE vs ABY 3 S3 (H vs M), So1 (L vs M), So3 (L vs M) 核心价值和社交主动性微差
6 AMERICAN vs ORANGE 3 E2 (M vs L), A1 (M vs L), A3 (H vs M) 情感投入和世界观微调

关键发现

  • CORNISH(柯尼斯卷毛猫)和 HIMALAYAN(喜马拉雅猫) 距离仅 1,在实际匹配中几乎无法区分。这意味着用户仅需在 So3(表达与真实度)上多得 1 分就会从「喜马拉雅猫」变成「柯尼斯卷毛猫」,体验上可能产生混淆。建议考虑合并或增加区分维度。
  • LIHUA-ABY-MAINE 三者形成一个"高功能三角"(两两距离 2~3),代表了"高自信 + 高执行 + 高驱动"的不同微变体。
  • AMERICAN-RUSSIAN-ORANGE 形成另一个"高认知独立三角"(两两距离 2~5),共同特征是 S1=H, S2=H, S3=L, E3=H, So2=H, So3=H。

3.4 最远类型对(距离 >= 22)

排名 类型对 距离 分析
1 AMERICAN vs HIMALAYAN 24 高认知独立 vs 低功能依赖,几乎全维度对立
2 MAINE vs SAVANNAH 24 缅因猫 vs 热带草原猫,价值观完全相反
3 RUSSIAN vs HIMALAYAN 24 俄罗斯蓝猫 vs 喜马拉雅猫,功能水平两极
4 JIANZHOU vs CORNISH 23 四川简州猫 vs 柯尼斯卷毛猫,驱动系统对立
5 AMERICAN vs CORNISH 23 美国短毛猫 vs 柯尼斯卷毛猫
6 LIHUA vs SAVANNAH 23 狸花猫 vs 热带草原猫,控制 vs 放纵
7 ORANGE vs HIMALAYAN 23 中华田园橘猫 vs 喜马拉雅猫
8 RAGDOLL vs BOMBAY 22 布偶猫 vs 孟买猫,全面付出 vs 全面抽离
9 RAGDOLL vs MUNCHKIN 22 布偶猫 vs 曼基康猫
10 RAGDOLL vs SAVANNAH 22 布偶猫 vs 热带草原猫
11 MAINE vs MUNCHKIN 22 缅因猫 vs 曼基康猫
12 MAINE vs CORNISH 22 缅因猫 vs 柯尼斯卷毛猫
13 LIHUA vs HIMALAYAN 22 狸花猫 vs 喜马拉雅猫
14 BENGAL vs BOMBAY 22 孟加拉豹猫 vs 孟买猫
15 JIANZHOU vs HIMALAYAN 22 四川简州猫 vs 喜马拉雅猫

关键发现

  • 最远距离 24(理论最大 30 的 80%),出现在"高功能+高独立"类型与"低功能+高依赖"类型之间。
  • HIMALAYAN(喜马拉雅猫)CORNISH(柯尼斯卷毛猫) 频繁出现在最远对中 -- 它们是空间中的"边缘类型"。
  • SAVANNAH(热带草原猫) 也频繁出现在远距离对中,因为它的模式与主流"高功能"类型形成强烈对比。

3.5 类型中心性分析

"中心性"定义为某类型到所有其他 24 个类型的平均曼哈顿距离。平均距离越低的类型越"中心"(越容易被匹配到),越高的越"极端"(越难被匹配到)。

为衡量中心性,我们使用类型的维度和(15 维数值之和)作为代理指标。25 个类型的维度和中位数约为 29~30,距此越近的类型越可能中心。

以下按维度和排序,并标注预估中心性等级:

类别 类型 维度和 中心性
极端低端 BOMBAY 20 极端边缘
极端低端 MUNCHKIN 20 极端边缘
低端 HIMALAYAN 21 边缘
低端 CORNISH 22 边缘
低端 EGYPTIAN 24 偏边缘
低端 SAVANNAH 24 偏边缘
中低 PERSIAN 27 偏中心
中低 CHARTREUX 27 偏中心
中心 SPHYNX 28 中心
中心 NORWEGIAN 29 中心
中心 BIRMAN 29 中心
中心 VAN 30 中心
中心 ORIENTAL 31 中心
中高 SIAMESE 33 偏中心
中高 JIANZHOU 33 偏中心
中高 EXOTIC 34 偏中心
中高 ORANGE 34 偏中心
中高 BRITISH 35 偏中心
中高 RUSSIAN 35 偏中心
高端 BENGAL 36 偏边缘
高端 AMERICAN 37 偏边缘
高端 MAINE 38 边缘
高端 ABY 39 边缘
极端高端 RAGDOLL 40 极端边缘
极端高端 LIHUA 41 极端边缘

最中心类型(最容易被匹配到):

  • BIRMAN(伯曼猫)VAN(土耳其梵猫)SPHYNX(斯芬克斯猫) -- 维度和在 28~30 之间,处于空间正中
  • 这些类型的模式串"不极端",各维度混合了 L/M/H,因此与大量用户向量的距离较小

最极端类型(最难被匹配到):

  • LIHUA(狸花猫) 维度和 41:15 维中 10 个为 H -- 需要用户在绝大多数维度都得高分
  • BOMBAY(孟买猫) 维度和 20:15 维中 11 个为 L -- 需要用户在绝大多数维度都得低分
  • 这两个类型位于空间的两个极端,代表"全面高功能"和"全面抽离"

3.6 类型聚类结构

基于距离分析,可识别出以下自然聚类:

聚类 A - "高功能领导群"(互距 2~6):

  • LIHUA(狸花猫)、ABY(阿比西尼亚猫)、MAINE(缅因猫)、RAGDOLL(布偶猫)
  • 共同特征:S1=H, S2=H, E1=H, Ac1=H, So2=H

聚类 B - "高认知独立群"(互距 2~5):

  • AMERICAN(美国短毛猫)、RUSSIAN(俄罗斯蓝猫)、ORANGE(中华田园橘猫)
  • 共同特征:S1=H, S2=H, S3=L, E3=H, So2=H, So3=H

聚类 C - "低功能脆弱群"(互距 1~6):

  • CORNISH(柯尼斯卷毛猫)、HIMALAYAN(喜马拉雅猫)、MUNCHKIN(曼基康猫)、BOMBAY(孟买猫)
  • 共同特征:多数维度为 L,So2 偏向 L(渴望亲近)

聚类 D - "中间温和群"(互距 5~9):

  • BIRMAN(伯曼猫)、VAN(土耳其梵猫)、BRITISH(英国短毛猫)
  • 共同特征:多数维度为 M,没有极端取值

孤立类型(与最近邻距离较大):

  • BENGAL(孟加拉豹猫):独特的 E2=H + E3=L + So1=H 组合
  • SAVANNAH(热带草原猫):独特的 E2=H + 几乎全 L 的其他维度
  • EGYPTIAN(埃及猫):独特的 A2=H + E3=H 但其余全低

4. 特殊机制

4.1 猫薄荷门控流程 (Catnip Gate)

猫薄荷门控是一个两阶段条件触发机制,用于解锁隐藏人格 SIAMNIP(暹罗猫·猫薄荷上头彩蛋):

                    catnip_gate_q1
        "娱乐之外主要靠啥续命?(CatBTI 团建学)"
                   /    |    |    \
           基础维护 爱好 薄荷激光局 跑酷代谢
              (v=1) (v=2) (v=3) (v=4)
                |     |     |     |
                v     v     |     v
              [忽略] [忽略]  |   [忽略]
                            v
                    catnip_gate_q2
        "对猫薄荷 / 激光笔在派对里的定位?"
                      /        \
 小玩怡情怕赔花瓶  养生碗藏猫薄荷(表面养生)
                   (v=1)       (v=2)
                     |            |
                     v            v
                   [忽略] SIAMNIP(暹罗猫·猫薄荷上头彩蛋)激活!
                              |
                              v
                        覆盖正常匹配结果
                        正常最佳匹配降为副结果

设计要点

  1. catnip_gate_q1 随机插入 30 题中,用户无法预判
  2. 仅选择「薄荷激光局」(v=3)才会触发 q2,其他选项不产生后续
  3. q2 的选项设计极端化:保守玩派(v=1)不触发,养生碗藏猫薄荷派(v=2)才触发
  4. 一旦 SIAMNIP 激活,完全覆盖正常匹配流程,正常最佳匹配仅作为次要展示
  5. catnip_gate_q1 和 q2 都不参与维度评分,仅用于门控判定

4.2 HHHH 对不上猫粮型兜底机制

当用户的 15 维向量与所有 25 个标准类型的最佳匹配相似度低于 config.scoring.fallbackThreshold(默认 60)时,系统强制分配 HHHH(对不上猫粮型)。

相似度(与运行时一致):
  similarity = max(0, round((1 - distance / maxDistance) * 100))
 其中 maxDistance = config.scoring.maxDistance(默认 30)

触发条件:
  similarity < fallbackThreshold
  => distance > maxDistance × (1 - fallbackThreshold/100)

默认值下(maxDistance=30, fallbackThreshold=60):
  => distance > 12

触发概率分析

距离超过上述阈值意味着用户的 15 维向量与所有 25 个类型都相差甚远。考虑到:

  • 25 个类型在 15 维空间中已有一定覆盖度
  • 最中心的类型(如 BIRMAN、VAN)到空间中心的距离较小
  • 用户答题产生的向量有 3^15 = 14,348,907 种理论组合

实际上,由于类型设计覆盖了高/中/低各区域,触发 HHHH 的概率较低,但并非不可能。最可能触发的用户画像是:答题模式极端不一致(某些维度极高、某些极低,且组合方式与任何已定义类型都不匹配)。

4.3 反向计分题目

分析所有 30 道题的选项值排列,大部分题目的选项按"低认同=1,中间=2,高认同=3"正序排列。但以下题目存在非标准排列

题号 维度 选项值顺序 说明
q6 S3 1, 2, 3 但语义反转 "外人评价无所谓" -- 不认同=1 表示在意外界评价(S3偏低),认同=3 表示不在意(但这里高分对应 S3=H "目标驱动",语义上有微妙矛盾)
q14 A1 3, 2, 1 第一个选项值=3(正面反应得高分),最后一个=1。选项顺序与值顺序相反
q16 A2 1, 2, 3 但语义反转 "打破常规"认同=1(偏灵活=L),不认同=3(偏规则=H)。值的语义方向与题目文字相反
q27 So2 3, 2, 1 "电子围栏"认同=3(边界感强=H),不认同=1。选项顺序降序
q28 So2 1, 2, 3 但语义反转 "渴望亲密"认同=1(边界感弱=L),不认同=3(边界感强=H)
q29 So3 1, 2, 3 "较少隐瞒"=1(直接=L),"不想暴露阴暗面"=3(分层=H)

设计意图分析

反向计分和非标准排列的设计目的是:

  1. 防止用户全选同一位置(如全选第一项),确保答案反映真实倾向
  2. 语义校准:某些题目的文字方向与维度方向相反(如"打破常规"描述的是低规则感,因此认同该说法应得低分)
  3. 降低社会期望偏差:混合正反计分使用户难以判断"正确"答案

潜在问题:q6 的设计值得注意 -- "外人评价无所谓"的高认同(=3)被映射为 S3 高分,但 S3 的 H 描述是"目标/信念驱动",而"不在意他人评价"更像是 S1(自信)或 E3(独立性)的特征。这可能导致维度间存在轻微的概念重叠。


5. 评分算法详解

5.1 完整步骤拆解

步骤一:维度求和

用户完成 30 道主要题目后,按维度将 2 道题的选项值相加:

S1 = q1.value + q2.value    (范围 2~6)
S2 = q3.value + q4.value
S3 = q5.value + q6.value
E1 = q7.value + q8.value
E2 = q9.value + q10.value
E3 = q11.value + q12.value
A1 = q13.value + q14.value
A2 = q15.value + q16.value
A3 = q17.value + q18.value
Ac1 = q19.value + q20.value
Ac2 = q21.value + q22.value
Ac3 = q23.value + q24.value
So1 = q25.value + q26.value
So2 = q27.value + q28.value
So3 = q29.value + q30.value

步骤二:分级映射

将每个维度的原始分(2~6)映射为 L/M/H。阈值来自 data/config.jsonscoring.levelThresholds,由 src/engine.jsscoresToLevels 使用:score <= L[1] → L,score >= H[0] → H,否则 M。默认配置下等价于下表:

原始分 等级 数值 可能的答题组合
2 L 1 1+1
3 L 1 1+2, 2+1
4 M 2 1+3, 2+2, 3+1
5 H 3 2+3, 3+2
6 H 3 3+3

注意:L 覆盖 2 种原始分(2,3),M 仅覆盖 1 种(4),H 覆盖 2 种(5,6)。这使得 M 的区间最窄 — 用户必须恰好得 4 分才能落入 M,概率上 M 比 L 和 H 更难获得。

M 级概率分析(假设选项等概率):

9 种可能的 (q1,q2) 组合中:

  • 得 4 分的组合:(1,3), (2,2), (3,1) = 3 种,概率 3/9 = 33.3%
  • 得 L 的组合:(1,1), (1,2), (2,1) = 3 种,概率 3/9 = 33.3%
  • 得 H 的组合:(2,3), (3,2), (3,3) = 3 种,概率 3/9 = 33.3%

实际上三级等概率,但由于 M 仅对应 1 个原始分值(4),用户的实际分布可能因题目设计偏向而不均匀。

步骤三:构建用户向量

将 15 个维度的等级数值化组成向量:

user_vector = [S1_num, S2_num, S3_num, E1_num, E2_num, E3_num, 
               A1_num, A2_num, A3_num, Ac1_num, Ac2_num, Ac3_num,
               So1_num, So2_num, So3_num]

步骤四:计算曼哈顿距离

对每个标准类型,解析其模式串并计算距离:

type_pattern = "HHH-HMH-MHH-HHH-MHM"  // 以 LIHUA 为例
type_vector  = [3,3,3,3,2,3,2,3,3,3,3,3,2,3,2]  // 去掉横杠,逐字符转换

distance = sum(|user_vector[i] - type_vector[i]|) for i = 0..14
exact    = count(user_vector[i] == type_vector[i]) for i = 0..14
similarity = max(0, round((1 - distance / maxDistance) * 100))  // maxDistance 默认 30,见 config

步骤五:排序与选择

结果列表按以下优先级排序:
  1. distance ASC(距离越小越好)
  2. exact DESC(精确命中维度越多越好)
  3. similarity DESC(相似度越高越好)

取排序后的第一个作为最佳匹配。

步骤六:特殊规则覆写

逻辑见 src/engine.jsdetermineResult。猫薄荷门控触发值以 config.catnipGate 为准(默认:catnip_gate_q1triggerValue(3)才插入第二题;catnip_gate_q2nipTriggerValue(2)则 isCatnipHigh)。HHHH 兜底best.similarity < config.scoring.fallbackThreshold(默认 60,由 main.js 传入引擎)。

if isCatnipHigh(猫薄荷追问第二题触发):
    primary = SIAMNIP,secondary = 正常最佳匹配
elif best_similarity < fallbackThreshold:
    primary = HHHH,secondary = 正常最佳匹配
else:
    primary = 正常最佳匹配

5.2 完整示例演算

场景:某用户的答题记录如下:

题号 维度 选值 题号 维度 选值
q1 S1 2 q2 S1 3
q3 S2 3 q4 S2 3
q5 S3 2 q6 S3 2
q7 E1 3 q8 E1 3
q9 E2 2 q10 E2 2
q11 E3 3 q12 E3 2
q13 A1 2 q14 A1 2
q15 A2 2 q16 A2 2
q17 A3 3 q18 A3 2
q19 Ac1 3 q20 Ac1 3
q21 Ac2 3 q22 Ac2 2
q23 Ac3 3 q24 Ac3 3
q25 So1 2 q26 So1 2
q27 So2 3 q28 So2 3
q29 So3 2 q30 So3 2

步骤 1:维度求和

维度 计算 原始分
S1 2+3 5
S2 3+3 6
S3 2+2 4
E1 3+3 6
E2 2+2 4
E3 3+2 5
A1 2+2 4
A2 2+2 4
A3 3+2 5
Ac1 3+3 6
Ac2 3+2 5
Ac3 3+3 6
So1 2+2 4
So2 3+3 6
So3 2+2 4

步骤 2-3:分级 + 数值化

维度 原始分 等级 数值
S1 5 H 3
S2 6 H 3
S3 4 M 2
E1 6 H 3
E2 4 M 2
E3 5 H 3
A1 4 M 2
A2 4 M 2
A3 5 H 3
Ac1 6 H 3
Ac2 5 H 3
Ac3 6 H 3
So1 4 M 2
So2 6 H 3
So3 4 M 2

用户向量:[3,3,2,3,2,3,2,2,3,3,3,3,2,3,2] 用户模式串:HHM-HMH-MMH-HHH-MHM

步骤 4:与部分类型计算距离

类型 类型向量 距离计算 距离 精确命中 相似度
LIHUA 3,3,3,3,2,3,2,3,3,3,3,3,2,3,2 0+0+1+0+0+0+0+1+0+0+0+0+0+0+0 2 13/15 93%
ABY 3,3,2,3,2,3,2,2,3,3,3,3,2,3,2 0+0+0+0+0+0+0+0+0+0+0+0+0+0+0 0 15/15 100%
MAINE 3,3,3,3,2,3,2,2,3,3,3,3,1,3,1 0+0+1+0+0+0+0+0+0+0+0+0+1+0+1 3 12/15 90%

结果:用户向量恰好等于 ABY 的模式串!距离=0,精确命中=15/15,相似度=100%。

最终匹配:ABY(阿比西尼亚猫)

显示:"匹配度 100% | 精准命中 15/15 维"

步骤 6:特殊规则检查

  • 假设用户未选「薄荷激光局」(v=3)-> 不触发 SIAMNIP
  • 最佳相似度100% ≥ fallbackThreshold → 不触发 HHHH
  • 最终结果确认为 ABY

6. 定制指南

6.1 添加新类型

步骤 1:设计模式串

新类型需要一个 15 维的 L/M/H 模式串,格式为 XXX-XXX-XXX-XXX-XXX(每段 3 个字符,顺序须与 dimensions.jsonorder 一致)。

设计要点:

  • 检查与现有 25 个类型的曼哈顿距离,建议最小距离 ≥ 3(避免出现像 CORNISH vs HIMALAYAN 距离=1 的问题)
  • 模式串的维度和(L=1,M=2,H=3 之和)应考虑空间覆盖:当前约 20~41,可在空缺区域填充
  • 若希望更易被匹配到,维度和可接近 29~30(空间中心)

步骤 2:编写类型信息

data/types.jsonstandard 数组中追加对象(字段与现有条目一致):

{
  "code": "NEW-T",
  "pattern": "MMM-MMM-MMM-MMM-MMM",
  "cn": "新类型中文名",
  "intro": "一句话介绍",
  "desc": "详细人格描述(建议 200-400 字,保持诙谐风格)"
}

步骤 3:验证

  • 展开 pattern 去掉 - 后长度为 15
  • 每个字符均为 L / M / H
  • 计算与所有现有类型的距离,检查是否存在过近对

6.2 修改题目

修改题目文本

编辑 data/questions.jsonmain 里对应题的 text,不改变 dim / value 时不影响计分逻辑。

修改选项

修改同一对象下的 options[].labeloptions[].value。注意:

  • 主问卷中 value 须为 1、2、3(与 calcDimensionScores 累加一致)
  • 改变同一题内 value 与选项的对应关系会改变正向/反向计分
  • 改后核对该题所属维度在 dimensions.json 中的语义是否仍一致

特殊题(猫薄荷门控)

编辑 questions.jsonspecial;触发逻辑与选项值需与 config.jsoncatnipGate 一致(questionIdtriggerValuenipTriggerValue)。

添加新题目

当前实现假定每维度 2 题、原始分 2~6。若每维增为 3 题:

  1. 调整 config.scoring.levelThresholdsengine.js 中相似度分母(若最大距离变化)
  2. 更新全部 standard[].pattern 或接受分布漂移

维度题目映射参考

维度 题目 ID
S1 q1, q2
S2 q3, q4
S3 q5, q6
E1 q7, q8
E2 q9, q10
E3 q11, q12
A1 q13, q14
A2 q15, q16
A3 q17, q18
Ac1 q19, q20
Ac2 q21, q22
Ac3 q23, q24
So1 q25, q26
So2 q27, q28
So3 q29, q30

6.3 调整评分参数

修改分级阈值

当前阈值(2 题/维度,原始分 2~6):

L: score <= 3
M: score == 4
H: score >= 5

可调整为更宽的 M 区间以增加 M 出现概率:

// 方案 A:扩大 M 区间
L: score <= 2
M: score == 3 or score == 4
H: score >= 5

// 方案 B:三等分
L: score <= 3
M: score == 4 (不变)
H: score >= 5 (不变)

注意:调整阈值会改变用户向量的分布,可能需要同步调整类型模式串或增加新类型来覆盖新的分布。

修改相似度计算

当前公式 similarity = max(0, round((1 - distance / maxDistance) * 100))maxDistancescoring.maxDistance(默认 30 = 15 维 × 每维最大差 2)。改维数后须同步更新该字段。

  • 若需加权距离:weighted_distance = sum(w[i] * |user[i] - type[i]|),须改 src/engine.js

修改 HHHH 兜底阈值

编辑 scoring.fallbackThreshold(相似度百分数,默认 60)。

  • 提高(如 70):更多用户落入对不上猫粮型兜底
  • 降低(如 50):兜底更少,主类型相似度可能更低

6.4 添加新维度

完整流程(增维后须同步 scoring.maxDistance,无需再改引擎字面量):

  1. data/dimensions.jsonmodels 中扩展某模型,或新增模型键并在 models 中注册
  2. 在同一文件的 definitions 中增加新维度键及 L/M/H 文案
  3. order 数组末尾(或约定位置)加入新维度代码,保证与 pattern 分段规则一致
  4. questions.jsonmain 中为该维度增加 2 道题(dim 指向新代码)
  5. 更新 types.jsonstandard 里全部类型的 pattern(每型多 1 个 L/M/H)
  6. 理论最大曼哈顿距离 = 2 × 维度数;同步修改 data/config.jsonscoring.maxDistancematchType 与相似度分母从配置读取)

6.5 添加新特殊机制

参考 catnip_gate_q1 / catnip_gate_q2:在 questions.jsonspecial 增加条目,在 types.jsonspecial 增加类型,并扩展 src/quiz.js / src/engine.js / src/result.js 中的分支(当前仅实现猫薄荷门控与 HHHH)。

{
  "id": "new_gate_q1",
  "special": true,
  "kind": "new_gate",
  "text": "题目",
  "options": [],
  "behavior": "中文说明:插入规则与触发条件(供编辑与审阅,前端可不解析)"
}

设计要点:

  • 门控题勿写入 main,且不进入 calcDimensionScores 所用题集
  • 多门控需定义优先级(当前 SIAMNIP 优先于 HHHH 于普通匹配)

7. 实现与配置一致性说明

项目 配置 (data/config.json) 代码
分级阈值 scoring.levelThresholds main.jsscoresToLevels
理论最大距离 / 相似度分母 scoring.maxDistance main.jsdetermineResultmatchType
HHHH 兜底阈值 scoring.fallbackThreshold main.jsdetermineResultbest.similarity < fallbackThreshold
猫薄荷门控 catnipGate quiz.js 读取 config.catnipGate

缺省:matchType / determineResult 内若未传参,仍默认 maxDistance = 30fallbackThreshold = 60,与当前 config.json 一致。


附录 A:维度-模型归属速查表

自我模型 (S)        情感模型 (E)        态度模型 (A)
  S1 自尊自信          E1 依恋安全感        A1 世界观倾向
  S2 自我清晰度        E2 情感投入度        A2 规则与灵活度
  S3 核心价值          E3 边界与依赖        A3 人生意义感

行动驱力模型 (Ac)    社交模型 (So)
  Ac1 动机导向         So1 社交主动性
  Ac2 决策风格         So2 人际边界感
  Ac3 执行模式         So3 表达与真实度

附录 B:距离 <= 5 的类型近邻表

类型 A 类型 B 距离 聚类关系
CORNISH HIMALAYAN 1 低功能群内
LIHUA ABY 2 高功能领导群内
AMERICAN RUSSIAN 2 高认知独立群内
LIHUA MAINE 3 高功能领导群内
MAINE ABY 3 高功能领导群内
AMERICAN ORANGE 3 高认知独立群内
BOMBAY EGYPTIAN 4 低功能群边缘
MUNCHKIN CORNISH 4 低功能群内
CHARTREUX PERSIAN 4 消极隐退群
SIAMESE JIANZHOU 4 高规则低社交群
AMERICAN ABY 4 跨聚类
RAGDOLL LIHUA 5 高功能领导群内
EXOTIC BRITISH 5 中间温和群边缘
MUNCHKIN HIMALAYAN 5 低功能群内
VAN BIRMAN 5 中间温和群内
JIANZHOU ORANGE 5 高认知群边缘
RUSSIAN ORANGE 5 高认知独立群内
EGYPTIAN PERSIAN 5 消极隐退群

附录 C:距离 >= 22 的最远对完整列表

类型 A 类型 B 距离
AMERICAN HIMALAYAN 24
MAINE SAVANNAH 24
RUSSIAN HIMALAYAN 24
JIANZHOU CORNISH 23
AMERICAN CORNISH 23
LIHUA SAVANNAH 23
ORANGE HIMALAYAN 23
RAGDOLL BOMBAY 22
RAGDOLL MUNCHKIN 22
RAGDOLL SAVANNAH 22
MAINE MUNCHKIN 22
MAINE CORNISH 22
LIHUA HIMALAYAN 22
LIHUA MUNCHKIN 22
LIHUA BOMBAY 21
BENGAL BOMBAY 22
JIANZHOU HIMALAYAN 22

报告结束