给出一起案件发生的时间和地点,猜它属于八类中的哪一类。本实验先定一个基线,再看做项目时常遇到的两件事:一列会泄露答案的字段,以及“小时”这个数该怎样交给模型。
数据说明:10000 条案件记录按旧金山公开犯罪数据集(课件第三节用的那一份)的大致比例生成,类别合并成了八类。它不是真实案件记录,其中的数字不能当作真实统计引用。
这一步看什么每条记录给出案件的时间和地点,要猜它属于八类中的哪一类。先比一比三种猜法各能对多少。最省事的那种猜法的成绩叫基线,模型的成绩要和它比。
—
模型用前 8000 条记录训练,后 2000 条当测试集。它看的是时间(小时、星期、月份)和地点(警区、经纬度、是否路口)。
瞎猜每次结果不同,大多落在 11% 到 14% 之间,平均是八分之一,也就是 12.5%。全押盗窃能对 25.8%,因为测试记录里盗窃本来就占这么多。
模型用的是第 3 章学过的逻辑回归,只是一次给八类各算一个概率,再取概率最大的一类作答。它的准确率是 40.2%,比基线高 14 个多百分点。四成听起来不高,和基线一比,就知道它从时间和地点里学到了东西。
这一步看什么原始记录里还有一列“案情描述”(第三节第 18 页的输入表里有它),是警员处理案件时填的。把这一列也交给模型,看准确率怎样变化。
| 案情描述 | 真实类别 | 模型判成 |
|---|
加上这一列,准确率从 40.2% 跳到 94.7%。“撬门入室”对应入室盗窃,这一列几乎就是答案换了个说法。约 5% 的记录描述和类别对不上,模型判错的几乎都是这些。
刚接到报警、案件还没处理时,手里只有时间和地点,还没有案情描述。训练时用了预测时拿不到的信息,就叫信息泄露。分数好得不合常理时,先查每一列是什么时候产生的。
这一步看什么案发时刻是 0 到 23 的整数。23 点和 0 点只差一小时,写成数字却相差 23。只换小时这一列的写法,其余各列不动,看模型的准确率怎样变化。
0 点和 23 点在直线上差 23 小时,在钟面上只差 1 小时。12 点和 23 点在两边都差 11 小时,只有跨过 0 点的两个时刻,两种写法才差得远。钟面写法用两列数记下每个时刻在钟面上的横、纵位置,课件第 20 页的正弦和余弦算的就是这两个数。
这份数据里,伤害、故意毁坏两类案件多在晚上 10 点到凌晨 2 点,正好跨过 0 点。直接用数字,模型看不出 23 点和 0 点挨着。换成钟面写法,准确率从 32.8% 升到 40.2%,大部分提高来自这一点。
前面三步的操作结果会自动写进报告。下面的题目按你实际看到的情况回答。