购物网站上经常能看到购物篮推荐,就是在购物过程中或购物过程后网站根据用户的购物情况做相应推荐。典型的比如amazon.com。我认为推荐的相当的准确。这个购物篮推荐的场景是一个数据挖掘的典型场景。当然愿意的话也可以不用现成的数据挖掘工具,自己设计算法、自己实现。
Microsoft sql server从2005开始就有一个一个专门用于购物篮推荐的数据挖掘算法:关联规则算法。
要使用这个关联算法来实现购物篮推荐,首先需要安装microsoft analysis server。这是从sql server 2000开始就附带在sql server中的一个服务。用于商业智能。
下面是microsoft analysis server 2008 r2的一个截图。我用它来分析一些手工造出来的数据,得到酒店间的关联关系。
从图中可以看出,analysis server有这么几个重要的概念:
1:数据库,比如那个HotelAssociation。
2:数据源,每个数据库实际连接的数据源,可以是关系型数据库,也可以是数据仓库
3:数据源视图,类似于sql server中的视图,一般是几个表和/或视图组成一个数据源视图。如下图的这个数据源视图
定义好以上这些对象之后就可以让analysis server来“处理”数据,也就是计算数据。计算结束后可以“浏览”。图一的右下方就是浏览tempOrder这个挖掘模型的结果。“规则”就是算出来的客户的预订行为规则。表示客户预订一个酒店后还会再订另外一个酒店。其中有两个重要的参数,一个是“概率”,一个是“重要性”。概率比较好理解,就是一个行为出现的概率。比如共有100位客户预订过A产品,其中有30位预订A之后又预订了B,那个规则A->B的概率就是30%。“重要性”我看微软的文档没看明白,没说具体的算法。以前有一个webcast说过这个概念,可以也没细说,一带而过。重要性可以为负,负数表示负关联,就是两个产品互相排斥。
这些算出来的规则可以在服务器上浏览,当然还可以用类似于sql的DMX来查询:
SELECT flattened
PREDICT([TempOrder].[temp reserve],INCLUDE_STATISTICS,3)
From
[TempOrder]
NATURAL PREDICTION JOIN
(SELECT (SELECT '宜兴大酒店' AS [Model]
// UNION SELECT 'Mountain Tire Tube' AS [Model]
// UNION SELECT 'Mountain-200' AS [Model]
) AS [Products]) AS t
这个语句是要查一下如果用户预订了“宜兴大酒店”的话,最有可能去预订的其他三个酒店。
这么查出来用处也不大。必须要能从客户端用程序访问才可以最终被作为web上的购物篮推荐。
用.net代码访问analysis server的数据,客户端必须安装adomd.net的客户端组件,需要下载。
msdn上能下载下来几个例子,一个是adomd.net的例子,一个是analysis server的samples。都不好使。这个问题目前我还没解决。如果有朋友已经解决,还请多指教。
另外一个问题是如何让analysis server定时自动计算?界面上没看到。我能想到的方法是用DMX实现自动计算,把DMX设为job。
还有一个问题我在微软文档中看到微软已经解决,就是在analysis server运算的时候,相应的数据库就没法查询了。sql server 2008 r2的解决方案是“同步”。可以把算好的数据同步到另外一台服务器上。一般情况下目标数据库只有几秒钟的不响应。
posted on 2010-05-24 22:31 阅读(38) 所属分类: