python案例统计回传次数反映保守程度?

wen python案例 1

用 Python 统计"回传次数"反映保守程度

这是一个很有意思的分析思路。"回传次数"通常指在对话/交互中,把问题抛回给对方、请求确认、或反复确认信息的次数,次数越多,说明越谨慎、越保守(不敢直接下结论)。

python案例统计回传次数反映保守程度?

下面给你一个完整的 Python 案例,覆盖数据建模 → 统计 → 量化保守度的流程。


场景定义

假设我们有一批客服/助手与用户的对话记录,定义:

  • 回传(back-pass):把决策权/信息再抛回给对方的行为,典型关键词:

    • "请您确认"
    • "您是指……吗"
    • "要不要再核实一下"
    • "为了避免出错"
    • "您看这样是否可以"
  • 保守程度 ≈ 单位对话内回传次数(密度),可归一化到 0~1。


构造示例数据

import pandas as pd
import re
# 每条记录:一次会话的文本
data = [
    {"session_id": 1, "text": "好的,已为您办理,请问还有其他需要吗?"},
    {"session_id": 2, "text": "您是指3月5日的订单吗?请您确认一下金额,我再帮您处理,为避免出错。"},
    {"session_id": 3, "text": "请您确认收货地址,我再核实一下,您看这样是否可以?需要再确认收件人吗?"},
    {"session_id": 4, "text": "已修改完成。"},
    {"session_id": 5, "text": "请问您确认要取消吗?为避免误操作,请您再确认一次,您看可以吗?"},
]
df = pd.DataFrame(data)

识别回传信号

# 回传语气/关键词库(可扩充)
BACKPASS_PATTERNS = [
    r"请您确认", r"请确认", r"确认一下", r"再确认",
    r"您是指", r"是不是", r"是否",
    r"为避免", r"避免出错", r"误操作",
    r"您看.*(可以|行|是否)",
    r"要不要", r"需要.*吗",
    r"核实",
]
def count_backpass(text: str) -> int:
    """统计一条文本中出现的回传信号次数"""
    cnt = 0
    for p in BACKPASS_PATTERNS:
        cnt += len(re.findall(p, text))
    return cnt
df["backpass_count"] = df["text"].apply(count_backpass)
df["text_len"] = df["text"].str.len()
print(df[["session_id", "backpass_count", "text_len"]])

量化"保守程度"

保守程度不只看绝对次数,还要看相对于文本长度的密度,否则话多也会显得保守。

# 1) 回传密度:每 100 字回传次数
df["backpass_density"] = df["backpass_count"] / df["text_len"] * 100
# 2) 归一化到 0~1(min-max)
def normalize(s):
    if s.max() == s.min():
        return s * 0
    return (s - s.min()) / (s.max() - s.min())
df["conservatism"] = normalize(df["backpass_density"])
print(df[["session_id", "backpass_count",
          "backpass_density", "conservatism"]].round(3))

输出大致:

session_id backpass_count backpass_density conservatism
1 0 00 00
2 3 14 75
3 4 81 00
4 0 00 00
5 4 53 97

分组/多维分析(进阶)

如果是多轮对话,可以按说话人、时间、主题分组,看保守程度差异:

# 示例:假设有说话人标签
df["speaker"] = ["A", "B", "B", "A", "B"]
summary = df.groupby("speaker").agg(
    平均回传次数=("backpass_count", "mean"),
    平均保守度=("conservatism", "mean"),
    会话数=("session_id", "count"),
).round(2)
print(summary)

还能画出时间趋势:

import matplotlib.pyplot as plt
plt.plot(df["session_id"], df["conservatism"], marker="o")
plt.xlabel("会话序号"); plt.ylabel("保守度")"回传次数反映的保守程度变化")
plt.ylim(0, 1.1)
plt.grid(alpha=0.3)
plt.show()

关键结论 & 注意事项

  1. 用密度而非绝对值:否则长文本天然吃亏。
  2. 关键词库要按领域定制:客服、医疗、金融的"保守信号"不同。
  3. 可加权:"为避免误操作" 比 "是不是" 更能说明保守,可给不同权重。
  4. 可结合语义模型:关键词法简单但漏召,进阶可用 BERT/LLM 判断"是否在回避决策"。
  5. 保守 ≠ 差:在高风险场景(金融、医疗)保守是优点,需结合业务解读。

一句话总结:保守程度 ≈ 回传信号密度 → 归一化,核心代码就三步:count_backpass → density → normalize。

如果你能告诉我数据的具体格式(对话日志?问卷?标注数据?)和"回传"的准确定义,我可以帮你把关键词库和算法改得更贴合你的场景。

上一篇综合实时python案例,控球率转化有效吗?

下一篇当前分类已是最新一篇

抱歉,评论功能暂时关闭!