写在前面:最近闲来无事,发觉CSDN已经好久没有更新,又不想弄点没啥营养的糊弄上来,于是想搞点模型的东西,就准备结合自己喜欢的法律部分搞一个模型出来。
一.项目目标
本项目将以历史的判例进行特征提取和数学建模,以每个历史案例的特征情况进行建模,预测法院的判决情况。
本项目将会以部分裁判文书网上面案由为故意杀人罪的刑事一审判决书为原始数据,通过爬虫的方式获取数据,并通过文本分析的方式对原始的文本进行目标文本提取,并对判决书中针对被告人信息、法院认定、判决情况等部分的信息进行特征提取,并进行特征转换以构建建模变量。本项目以法院的一审判决作为目标变量进行建模,观察该思路建模的模型有效性,并从数据建模的角度去分析法院一审结果的影响因素。
二.爬虫部分
爬虫部分,从裁判文书网https://wenshu.court.gov.cn/上面获取历史的相关判例,由于裁判文书网属于官方政府网站,反爬级别非常高,为了省事,这边的处理结果是不使用传统的请求url的方式进行获取,而是用selenium+chromedriver的方式,用特定端口的方式打开一个新的浏览器,登录后将浏览器停留在需要爬取的页面中,再交由python脚本进行数据爬取。这个速度比传统的爬虫速度慢很多,但是也算是能爬取到数据,对于小数据量级的模型构建,也算是一种解决办法。
在本项目中,主要爬取的是裁判文书网中案由为故意杀人罪的刑事一审判决书,所涉及到的筛选条件如下:
三.文本提取
该部分主要将刑事判决书中的各个部分提取出来,由于一般的法律文书都比较规范,该部分主要使用正则表达式的规则,将刑事判决书中的各个部分提取出来,主要提取的内容有以下几个部分:
- 被告人部分;
- 法院认定部分;
- 判决部分;
- 裁判日期。
将各个部分的文本进行提取后,分别进行存储,方便在下一步特征提取中进行定位。
四.特征提取
本部分将针对各部分文本提取相关的特征,各部分的特征如下:
4.1被告人部分
- 被告人生日;
- 被告人性别;
- 被告人学历情况;
- 被告人前科被判刑次数。
4.2法院认定
- 是否自首;
- 是否坦白;
- 是否立功;
- 是否认罪;
- 是否认罚;
- 是否悔罪;
- 是否得到被害人家属谅解;
- 是否被认定为偶犯;
- 是否初犯;
- 是否犯罪中止;
- 是否犯罪未遂;
- 情节是否严重;
- 情节是否轻微;
- 犯罪行为是否恶劣;
- 被害人是否存在过错。
4.3法院判决
- 被认定罪名;
- 判决主刑;
- 判决主刑时长。
针对该部分,属于文本挖掘的范畴,如果是比较严谨且正式的做法应该是用NLP自然语言处理的方式进行特征提取,如先进行文本标注,再通过BiLSTM机器学习的方式进行文本特征提取。但在本项目中,由于数据量较少,且本人对机器学习并不熟悉,因此该部分只使用正则表达式+规则的方式进行特征提取。
在该部分,由于并不是所有的判决书都会涉及到以上的所有特征,因此,对于上述特征部分,有认定的则为1,不认定的则为0,没有提及的则为空白,因此,该部分所提取的特征矩阵为稀疏矩阵。
五.数据合并与特征转换
在该部分,对各部分进行数据合并,并将非数值型的数据转换为数值型。
- 对判决日期-被告生日,得到判决时被告人年龄;
- 性别和学历进行字符数值型转换。
对于判决书中涉及到多个被告人的进行剔除(由于本项目中法院认定部分并没有对多个被告人的认定进行区分,该部分会有问题),只保留一份判决书涉及一个被告人的部分。
六.数据建模
6.1数据筛选
经过上述的数据预处理过程后,数据量为890条,选择最后认定为故意杀人罪且有判处主刑的数据进行建模,总数据量为855条,以7:3划分训练集和测试集。
6.2模型构建
以所有的特征进行建模,以是否被判处无期徒刑及以上为y,若被判处无期徒刑或死刑,则为1,否则为0,构建逻辑回归模型。
6.3模型效果
模型训练集和测试集的ks和auc如下:
入模参数的系数情况如下:
写在后面
本项目只是一个比较简单的数据建模项目,并不属于严格的法律相关的范畴,只是纯粹从数据的角度去分析有哪些因素是会影响到最终的判决情况,与实际的判决肯定是有本质性的学术差别。单就本项目而言,有许多方面可以进行优化发展:
- 建模样本数据量。由于裁判文书网反爬措施的限制,本项目使用的是基于selenium的半自动爬虫,因此爬取效率比较低,数据量比较少;
- 案由限制。本项目针对的是故意杀人罪进行建模,且一个判决书中限定仅为一个被告人,后续的延伸可以设定为其他的案由,可以是其他的刑事判决、甚至是民事判决;
- 特征工程部分。本文所提取的仅为很小一部分的特征,若进行延伸,则可以进行特征的进一步构建,如:被告人犯案时的年龄、是否大于60岁、是否小于18岁等特征,对模型的建模数据进行进一步构建;
- 特征提取部分。本项目由于数据量的局限和本人技术的局限,对于特征提取仅适用正则表达式+规则的方式进行特征提取,但在实际的项目进程中,对于该部分较为规范的中文文本提取,应该是有一套标准且规范的NLP方法;