我正在尝试用Python编写一个简单的电子邮件排序程序(类似于优先收件箱)。这个程序基于从发件人接收到的电子邮件频率进行排序。例如,可以使用50%的数据作为训练集,统计发件人的频率,然后使用另外50%的数据作为测试集,根据训练结果对其进行排序(因此,来自发送大量邮件的发件人的电子邮件将被排在前面)。
我已经编写了一些Python代码来提取每封电子邮件的“发件人”地址,并将这些信息放入一个列表中,该列表显示了最常见的电子邮件发件人(下面是该列表的一个示例片段)。
//(电子邮件地址,发件人发送的电子邮件频率)//Not Code ('[email protected]', 244) ('[email protected]', 162) ('[email protected]', 154) ('[email protected]', 75) ('[email protected]', 50)
我知道有很多机器学习算法可以有效地训练和测试我的数据,以实现我所需的功能。然而,我不确定使用哪种算法能给我带来最佳结果?
回答:
仅基于发件人进行排序从来都不是一个好主意。就我个人而言,我订阅了GitHub提交的电子邮件通知。由于同事的代码提交,我每天会收到数百封电子邮件。
这从来都不是一个简单的问题,根据我的经验,即使是Gmail的优先收件箱也做得不好。一个好的电子邮件优先级排序或评分系统需要好的特征。我建议从以下特征开始。参见Gmail优先收件箱背后的学习:
- 社交特征。发件人或发件人域名;
- 线程特征。这封邮件是否在一个活跃的线程中?这封邮件在线程中的序列号是多少?如果有抄送用户,是谁?
- 时间特征。这封邮件是什么时候收到的?如果你有访问邮件所有者的回复记录,你可能想要跟踪所有者回复所需的时间。
- 内容特征。这是垃圾邮件过滤中使用的词袋模型。
- 行为。这是电子邮件账户所有者对邮件的响应方式。是回复了?还是从未阅读过?还是立即删除了?还是归档到不同的文件夹中?是否标记了?如果回复了,你可能还想进行一些内容分析。回复的长度也可能是一个好的特征。
对于回归模型,Gmail使用线性逻辑回归来保持学习和预测的可扩展性。
最后,像Gmail所做的那样,你可以让用户通过提供一个标记重要邮件的选项来帮助你改进系统。
进一步阅读: