Blog信息 |
|
blog名称:IDMer (数据挖掘者) 日志总数:175 评论数量:848 留言数量:119 访问次数:2494415 建立时间:2005年6月24日 |
我的相册 |
|

|
联系方式 |
 |
|
| |
公告 |
“数据挖掘者”博客已经搬家,欢迎光临新博客网址:http://idmer.blog.sohu.com 我的新浪微博:@张磊IDMer |
网络日志 |
|
如何确定模型的准确性 |
|
|
|
|
|
数据挖掘者 发表于 2005/7/13 13:37:17 |
|
|
|
以下帖子是我在dwway(数据仓库之路)论坛上的回贴:http://www.dwway.com/vbbs/showthread.php?p=106962#post106962qinhui99:大家好,我在做一个响应模型的练习。我使用C5.0算法,预测用户是否对某产品响应。用训练数据得到的准确性是66.4%,用测试数据得到的准确性是74.6%。那么我这个模型的准确性应该是多少?孤独一狼:用真实数据去验证qinhui99:我这里的训练数据和测试数据都是真实的数据。这两个数据都是从促销活动得到的结果数据。不是很明白你说的“真实数据”的含义。能否说的更详细些?Sunstone:实际上两个评估结果都应该作为模型的准确性,基于训练集数据进行的评估称为闭集测试(训练和测试使用相同的数据集),基于测试数据进行的评估称为开集测试(训练和测试使用的是完全不同的数据集)。因此你可以给出如下的性能评估结果:
准确性:闭集测试(66.4%),开集测试(74.6%)
此外,因为单次测试和基于单个数据集的测试很可能缺乏足够的说服力,建议你将训练集和测试集划分为多个数据集,进行多次测试,最后给出综合的评估结果。
随着时间的推进,预测模型的泛化能力和退化速度也是很值得关注的。狼兄所说的“用真实数据去验证”可能指的是你要用模型来验证它在后续营销活动中的有效性。比如你在建立模型时用的是3月份的营销数据,那么可以用4、5、6月份的营销数据来进行评估,看看它在随后各次活动数据上的表现。一般来说,模型的准确率会逐步下降(因为市场环境和客户行为模式在不断变化中),当准确率明显下降(低于某个期望的阈值)时,就需要分析原因,重新建立和训练模型了。
BTW:用模型在整个数据集上的准确性来描述模型的性能常常意义不大。比如在你的例子中,模型是用于发现哪些客户会对产品促销积极响应,那么分析的目标是找出这些客户的特征,并用于在今后的营销活动前锁定目标客户群。假定你的训练集大小为10万,其中响应的客户数为1万,未响应的客户数为9万。而你的模型预测出了1万响应客户中的500人和9万非响应客户中的1000人为响应客户,而其它的都预测为非响应客户。那么模型在整个数据集上的准确性就等于(500+89000)/100000=89.5%可以很明显地看出虽然准确性很高,但意义不大。
如果你只关注响应客户的预测准确率(实际上应称为召回率,Recall rate),那么该指标就等于500/10000=5%这个指标明显就低多了。
最常见的做法是画出命中率(Hit rate)曲线,横坐标为给出的名单大小,纵坐标为在相应名单中响应客户所占的百分比,这条曲线一般是递减的。而且曲线越陡峭,模型的性能就越好,因为你只需给出一份较小的名单,就能让营销活动足够有效(因为抓到了尽可能多的目标客户)。当然,曲线的起点(纵坐标)越高,模型的性能就越好。只是在实践中,不必一味强求命中率一定要达到多少,需要关注的是它对营销活动的意义有多大。因为模型的命中率常常和你能拿到多少数据进行分析、数据的质量如何、数据中蕴含的规律性有多大等等有很大的关系。
除了模型的命中率曲线图、召回率曲线图之外,一般还需要提供LIFT图来说明模型的性能。LIFT图和命中率图类似,只是纵坐标要除以基线响应率(即数据集的整体响应率,比如在上面我举的例子中,基线响应率为10000/100000=10%),这个指标就避免了当不同训练集基线响应率不同,单纯用命中率对模型的评估时造成的不公平。如果一个数据集中的基线响应率很高,而另一个数据集中的基线响应率很低,那么我们很容易地想到用前者建立模型时的命中率可能会更高一些,因为一方面响应客户的特征可能更明显,另一方面即便随机抓取名单,前者也会比后者抓到更多的响应客户。 |
|
|
|
阅读全文(3110) | 回复(0) | 编辑 | 精华 |
|
|
|
|
|
|
| |