本篇记录通过寻找特征提升精确度的过程,以及讨论了当前87%精确度模型下和hard规则的关系。
1. 提升预测精确度的方法:
- 新增特征:是否创建过视频号 80% -> 87%
- 合并目标值:postRet 从 1234 合并成 0 和 1
2. hardCode 规则测试
使用硬性条件约束
我使用python pandas读取了csv,其中有4列名分别为’EditTimeMs’、’WordingCount’、’EnterScene’和’postRet’,我想统计一下在’EditTimeMs’不为0,’WordingCount’不为0,’EnterScene’不为16时,’postRet’这列中值为1的占比
import pandas as pd
# 读取 xlsx 文件
df = pd.read_csv('/Users/blibli/Documents/答辩数据/merged_data.csv', low_memory=False)
# 查询满足条件的数据
query_df_1 = df.query("EditTimeMs != 0 and WordingCount != 0 and EnterScene != 16 and postRet_format == 1")
query_df_0 = df.query("EditTimeMs != 0 and WordingCount != 0 and EnterScene != 16 and postRet_format == 0")
# 计算占比
ratio = len(query_df_1) / (len(query_df_1) + len(query_df_0))
print(ratio)
0.9869008997980045
测算这部分比例
import pandas as pd
# 读取 xlsx 文件
df = pd.read_csv('/Users/blibli/Documents/答辩数据/merged_data.csv', low_memory=False)
# 查询满足条件的数据
query_df = df.query("EditTimeMs != 0 and WordingCount != 0 and EnterScene != 16")
# 计算占比
ratio = len(query_df) / len(df)
print(ratio)
0.2722833333333333
去除可以准确预测的部分
我想接着在pandas中把这些满足条件的行给删掉,使用python代码应该怎么写呢?
# 获取满足条件的行的索引
index_to_drop = query_df.index
# 删除满足条件的行
df_without_rows = df.drop(index_to_drop)
df.drop(index_to_drop, inplace=True)
剩下的部分同样使用线性SVM模型进行预测,预测准确率为: 0.8162143593266918
计算下当前情况的真实精确度
用户拉起发表页面100次,主动退出21次。
按照现网的逻辑就是:
- 精确度79%
- 召回率:100%
按照目前模型的数据是:
100次里面,有27次一定能预测出来。
还剩下73次,只能预测出60次,还剩下13次预测不出来。
总结下来就是:13次预测不出来,87次可以预测出来。
87次预测出来的,精确度贡献就是满的。
13次预测不出来的,就相当于是预测错了,错的概念就是:
- 不发表的,去走了发表,触发了CDN。
- 发表的,没有触发CDN。
假设这13次里面,3次是不发表,10次是发表。
精确度就是:87%。
召回率是:90%
也就是说,不用hardCode规则,其实和用都差不多,支撑向量机已经学习到了这个hardCode规则。
看一下没有编辑过内容,但又在编辑页面停留的用户比例
- 配乐: addEditMusic
- 表情贴纸: hasEmojiSticky
- 文字贴纸: hasTextSticky
- 裁剪时长: isDurationCut
import pandas as pd
# 读取 xlsx 文件
df = pd.read_excel('/Users/blibli/Documents/答辩数据/merged_compress_data.xlsx')
print(df)
# 查询满足条件的数据
query_df = df.query("addEditMusic == 0 and hasEmojiSticky == 0 and hasTextSticky == 0 and isDurationCut == 0")
# 计算占比
ratio = len(query_df) / len(df)
print(ratio)
0.96 的人都不使用编辑功能。