挖掘基于时间序列的数据
来自:MACD论坛(bbs.macd.cn)
作者:冰雪寒香
浏览:6114
回复:6
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
挖掘基于时间序列的数据
张宝生 bszhang@sina.com
时间序列的数据库内某个字段的值是随着时间而不断变化的,例如股票价格每天的涨跌,科学实验,浏览网页的次序等。
这儿,我们运用数据挖掘的方法来对这些数据库进行“趋势分析”,“相似搜索”,“挖掘序列模式”,“时段模式”。
一, 趋势分析:
一个变量Y,表示某一支股票每天的收盘价,可以看作是时间t的函数,例如:Y=F(t);
这样的函数可以用一个时间序列的图来表示。
我们怎么样来分析这些时间序列的数据呢?这儿有四个方面值得我们注意的:
1, 长时间的走向:表明在很长一段时间内总的走向趋势,这个可以用一个“趋势曲线”或者“趋势直线”来显示,具体方法将在下面讲到。
2, 周期的走向与周期的变化:直线和曲线的振荡并不是周期的,这个循环并不遵循基于相等时间的规律。
3, 季节性的走向与变化:例如在情人节来之前,巧克力和花的销量突然的增大。换一个话说,就是在连续的很多年中,有一段时期总是与这年中的其他时期大不同。
4, 不规则的随机走向;由于一些突发的偶然事件而产生的。
上面这些走向我们分别可以用变量T,C,S,I来表示,时间序列分析也就可以是将一个时间序列的数据分割成这四个基本的趋势。这时间序列变量Y就可以模化为这四个变量的乘积或者是总和。
“给定Y的的集合,我们怎么样来分析出数据的走向呢?”
一个很普遍的方法就是计算平均值,这个方法就叫做“moving average of order n”。如果采用一个有权重的方法的话,就是“weighted moving average of order n”。
例:给定9 个数的序列,我们计算出它的moving average of order 3和weighted moving average of order 3(用权重1,4,1)。这个可以用下表来表示:
3,7,2,0,4,5,9,7,2
4,3,2,3,6,7,6
5.5, 2.5, 1,3.5,5.5,8,6.5
给中间一个权重大是为减少平滑的影响。
那么我们还有没有其他的方法来估计这个趋势呢?其中的一个方法是“freehand method”:用一个相似的曲线来代替数据,这儿最相似的曲线我们定义为di的总和最小,di是指曲线yi与实际数据yi的差。
有没有一些方法来调整季节性波动的数据呢?在实际的商业运用中,人们总想一般化季节性的波动。我们可以采用seasonal index numbers的方法。
二, 挖掘序列模式。
“什么是序列模式挖掘?”序列模式挖掘是基于时间或者其他序列的经常发生的模式。序列模式的一个例子就是“一个9个月前买了一台PC的顾客有可能在一个月内买一个新的CPU”。很多数据都是这种时间序列形式的,我们就可以用它来市场趋势分析,客户保留和天气预测等等。
序列模式挖掘的例子和参数:有很多参数对于挖掘的结果影响很大:
首先是时间序列T的持续时间,也就是这个时间序列的有效时间或者是用户选择的一个时间段,例如1999年。这样序列模式挖掘就被限定为对某段特定时间内的数据的挖掘。
其次是时间折叠窗口w,在一段时间内发生的几件事件可以被看作是同时发生的,如果w被设置为持续时间T的长度,我们就可以发现一些关联模式——“在1999年,一个买了PC机用户又买了数字照相机”(并不考虑先后顺序)。如果w被设置为0,那么序列模式就是两个事件发生在不同的时间里——“已经买了Pc机和内存的顾客有可能在以后买一个光驱”。如果w被设置为一段时间间隔(例如一个月或者是一天),那么在这段时间的交易在分析中可以被看作是同时发生的。
第三个参数是时间间隔,int,这个参数表示发现的模式的时间间隔。
Int=0:在这儿,我们要考虑参数w,例如如果这个参数设置为一个星期,那么发生了事件A,事件B会在一星期内发生。
Min_interval<max_interval:表示我们发现的事件发生的间隔小于min_interval大于max_interval。例如:“如果一个租了影片A,那么他一定会在一个月内租影片B”,这儿隐含着int<30。
Int=c而c不为0,那么意味着两件事的间隔在固定的时间内,例如:每次股票A下跌了5%,那么两天后会发生什么事? |