下面给你一套可落地的「性格分析测试 + 性格匹配算法」方案,适合用于交友、婚恋、团队协作、兴趣社群等产品。
一、性格分析测试模型选择
推荐使用 大五人格 Big Five / OCEAN,比 MBTI 更适合做算法量化。
5 个维度
| 维度 | 英文 | 含义 |
||||
| 开放性 | Openness | 好奇心、想象力、接受新事物 |
| 尽责性 | Conscientiousness | 自律、计划性、责任感 |
| 外向性 | Extraversion | 社交能量、表达欲、活跃度 |
| 宜人性 | Agreeableness | 共情、合作、包容 |
| 神经质 | Neuroticism | 情绪波动、焦虑敏感度 |
每个用户最终可以得到一个向量:
```text
用户A = [开放性, 尽责性, 外向性, 宜人性, 神经质]
用户B = [开放性, 尽责性, 外向性, 宜人性, 神经质]
```
例如:
```text
A = [82, 65, 70, 88, 35]
B = [75, 72, 60, 80, 40]
```
二、性格测试题设计
可以使用 5 分制或 7 分制。
示例评分
```text
1 = 非常不同意
2 = 不同意
3 = 一般
4 = 同意
5 = 非常同意
```
示例题目
开放性
1. 我喜欢尝试新鲜事物。
2. 我对艺术、哲学或抽象问题感兴趣。
3. 我不太喜欢固定不变的生活。
尽责性
1. 我做事通常有计划。
2. 我会按时完成承诺的事情。
3. 我的生活和工作比较有条理。
外向性
1. 我喜欢和人交流。
2. 聚会或社交活动会让我感到兴奋。
3. 我比较容易主动开启话题。
宜人性
1. 我愿意理解别人的感受。
2. 我通常愿意妥协来维持关系。
3. 我不喜欢与人发生冲突。
神经质
1. 我容易感到焦虑或紧张。
2. 我对比较敏感。
3. 我情绪波动有时比较明显。

> 注意:部分题目可以设置为反向题,用来降低用户随便答题的影响。
三、性格分析得分计算
1. 原始得分
每个维度有若干题,例如每个维度 6 道题。
```text
开放性得分 = 开放性题目总分 / 题目数量
```
如果是 1~5 分制,可以将其转换为百分制:
```text
百分制得分 = (平均分 - 1) / 4 × 100
```
例如平均分 4.2:
```text
(4.2 - 1) / 4 × 100 = 80
```
四、性格匹配算法
性格匹配不建议只看“越相似越好”,因为有些维度适合相似,有些维度适合互补。
1. 相似型匹配维度
这些维度通常越接近越容易相处:
| 维度 | 匹配逻辑 |
|||
| 开放性 | 相似更好 |
| 尽责性 | 相似更好 |
| 宜人性 | 相似更好 |
| 神经质 | 相似更好,尤其情绪稳定性差距不宜过大 |
2. 互补型匹配维度
部分场景下可以互补:
| 维度 | 匹配逻辑 |
|||
| 外向性 | 可相似,也可适度互补 |
| 决策风格 | 一个主动一个配合,可能更合适 |
| 生活节奏 | 不宜差距过大,但可以轻微互补 |
五、基础匹配公式
方法一:加权距离匹配
```text
匹配分 = 100 - Σ |A维度分 - B维度分| × 权重
```
示例权重:
```text
开放性:0.18
尽责性:0.22
外向性:0.15
宜人性:0.25
神经质:0.20
```
如果:
```text
A = [82, 65, 70, 88, 35]
B = [75, 72, 60, 80, 40]
```
差值:
```text
开放性差值 = 7
尽责性差值 = 7
外向性差值 = 10
宜人性差值 = 8
神经质差值 = 5
```
计算:
```text
匹配损失 = 7×0.18 + 7×0.22 + 10×0.15 + 8×0.25 + 5×0.20
= 1.26 + 1.54 + 1.5 + 2 + 1
= 7.3
匹配分 = 100 - 7.3 = 92.7
```
所以两人的性格匹配度约为:
```text
92.7%
```
六、进阶匹配算法
可以拆成多个子分数:
```text
总匹配分 = 性格相似度 × 40%
+ 情绪稳定匹配 × 20%
+ 沟通风格匹配 × 15%
+ 生活方式匹配 × 15%
+ 价值观匹配 × 10%
```
示例
```text
总分 = personality_score 0.4
+ emotion_score 0.2
+ communication_score 0.15
+ lifestyle_score 0.15
+ value_score 0.1
```
这样比单纯人格匹配更准确。
七、匹配等级划分
| 匹配分 | 匹配等级 | 说明 |
||||
| 90~100 | 极高匹配 | 性格和相处方式非常接近 |
| 80~89 | 高匹配 | 整体适合,少量差异 |
| 70~79 | 中高匹配 | 可以相处,但需要理解差异 |
| 60~69 | 普通匹配 | 存在明显差异 |
| 60 以下 | 低匹配 | 需要谨慎判断 |
八、匹配结果文案示例
高匹配
```text
你们在责任感、情绪稳定性和共情能力方面较为接近,说明双方在沟通和相处中容易建立信任。你们都重视稳定关系,也愿意照顾对方感受,因此整体匹配度较高。
```
中等匹配
```text
你们在部分性格维度上比较互补,但在生活节奏或表达方式上可能存在差异。建议双方在相处初期多沟通边界和期待,避免因误解产生冲突。
```
低匹配
```text
你们在情绪处理、生活节奏或沟通方式上存在较明显差异。如果希望建立稳定关系,需要更多耐心和磨合,尤其要注意冲突时的表达方式。
```
九、简单伪代码
```python
def personality_match(user_a, user_b):
weights = {
"openness": 0.18,
"conscientiousness": 0.22,
"extraversion": 0.15,
"agreeableness": 0.25,
"neuroticism": 0.20
}
loss = 0
for trait in weights:
diff = abs(user_a[trait] - user_b[trait])
loss += diff weights[trait]
score = 100 - loss
if score < 0:
score = 0
return round(score, 2)
```
十、数据库字段设计示例
用户性格表
```sql
CREATE TABLE user_personality (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
openness_score DECIMAL(5,2),
conscientiousness_score DECIMAL(5,2),
extraversion_score DECIMAL(5,2),
agreeableness_score DECIMAL(5,2),
neuroticism_score DECIMAL(5,2),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
```
用户答题表
```sql
CREATE TABLE personality_answers (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
question_id BIGINT NOT NULL,
answer_score INT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
```
十一、注意事项
1. 性格测试不等于心理诊断。
2. 匹配算法只能作为推荐参考,不能决定关系质量。
3. 测试题数量越少,准确率越低。
4. 建议至少 25~50 道题。
5. 需要设置反向题、防刷题、异常答题检测。
6. 如果用于婚恋,建议加入价值观、生活习惯、亲密关系需求等维度。
如果你是要做产品,我建议算法结构是:
```text
性格匹配 40%
价值观匹配 25%
生活方式匹配 20%
沟通/亲密关系偏好 15%
```
这样比单纯的性格匹配更实用。
