本发明涉及一种基于隐马尔可夫模型的消费者线下消费行为的预测方法,主要是一种对消费者历史线下消费数据进行处理,通过隐马尔可夫模型预测该用户未来最有可能消费的线下商店的方法。
背景技术:
随着电子商务的不断发展,o2o模式和手机移动支付也在迅速的发展。用户在线下消费时会产生大量的消费数据,这些数据中包含了很多有用的信息。通过分析这些信息,可以分析各个消费者的消费习惯从而预测消费者未来可能的消费行为,这对给用户提供更好的个性化推荐服务和商家优化经营和管理策略都是非常重要的。
如何更好的利用历史消费数据从而有效快速地预测消费者未来的消费行为,是本领域技术人员急需解决的问题。
技术实现要素:
本发明的目的是克服现有技术中的不足,提供一种基于隐马尔可夫模型的消费者线下消费行为的预测方法。
基于隐马尔可夫模型的消费者线下消费行为预测方法,包括如下步骤:
步骤一、数据预处理得到观测序列:
抽取消费者的长度为t的历史商家消费数据{shop1,shop2,…,shopt}并对消费者的历史消费线下商家进行编号;然后根据时间顺序把消费数据按照商家编号转换成观测值序列(o1o2…ot);
步骤二、初始化隐马尔可夫模型:
通过一个三元组参数确定一个隐马尔可夫模型,λ=(a,b,π)指代,分别包含转移矩阵a、混淆矩阵b和初始状态矩阵π;给参数a,b,π置随机初始值λ=(a1,b1,π1);
步骤三、使用baum-welch算法和观测序列(o1o2…ot)对模型进行迭代:
已知观测序列o=(o1o2…ot),估计参数模型λ=(a,b,π),使得该模型下观测概率p=(o|λ)最大;
baum-welch算法具体步骤:
输入:观测数据o=(o1,o2…ot)
输出:隐马尔可夫模型参数
(1)初始化:对于n=0,选取
(2)递推,对于n=1,2,…,
其中,αij=p(yt+1=sj|yt=si)bij=p(xt=oj|yt=si)πi=p(y1=si),
αt(i)为前向变量,即输出为(o1,o2,…ot),在t时刻位于状态si的概率;βt(i)为后向变量,即时刻t状态为si后输出为(ot+1,ot+2…ot)的概率;
(3)终止,得到模型参数λ(n+1)=(a(n+1),b(n+1),π(n+1))
步骤四、使用viterbi算法和训练好的模型,计算观测序列(o1o2…ot)对应的最优的状态序列;然后预测t+1时刻的最有可能的状态yt+1,然后计算t+1时刻概率最大的观测值;
viterbi算法具体步骤:
输入:观测数据o=(o1,o2…ot)
输出:隐马尔可夫模型参数
输出:最优隐状态概率i=(i1,i2…it)
(1)初始化:δ1(i)=πibi(o1),1≤i≤nψ1(i)=0
(2)递推,对于t=2,3,…,t
其中,δt(i)是viterbi变量,ψt(i)是路径记忆变量;
(3)终止,
(4)回溯最优路径,t=t-1,t-2,…,1
it=ψt+1(it+1);
步骤五、通过计算的t+1时刻概率最大的观测值ot+1并对照商家编号即可得到消费者在t+1时刻最有可能消费的线下商店shopt+1。
作为优选:步骤二中,隐马尔可夫模型参数包括三元组λ=(a,b,π),具体含义:
转移矩阵
其中aij=p(yt+1=sj|yt=si)(1≤i,j≤n)表示t时刻状态是si且t+1时刻状态是sj的概率;
混淆矩阵
其中bij=p(xt=oj|yt=si)(1≤i≤n,1≤j≤m)表示t时刻状态是si且观测值是时刻状态是oj的概率;
初始状态矩阵πi=p(y1=si),1≤i≤n
其中πi表示在初始t=1时刻状态是si的概率。
作为优选:步骤三中,隐马尔可夫模型中的变量分为2组;第一组是状态变量y={y1,y2,…,yn},其中yi表示第i时刻的系统状态;假定状态是隐藏的、不可被观测的;第二组是观测值变量x={x1,x2,…,xn},其中xi表示第i时刻的观测值;在隐马尔可夫模型中,系统在多个状态s={s1,s2,…,sn}之间转换,因此状态变量yi的取值范围为n个取值的离散空间。
本发明的有益效果是:提供了一种基于隐马尔可夫模型的消费者线下消费行为的预测方法,使用概率图模型更加准确高效地对不同用户的线下消费行为进行预测。
附图说明
图1是本方法流程图;
图2是隐马尔可夫模型示意图;
图3是实验性能比较图。
具体实施方式
下面结合实施例对本发明做进一步描述。下述实施例的说明只是用于帮助理解本发明。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
如图1所示,本实施方式中的基于隐马尔可夫模型的消费者线下消费行为预测方法,其步骤如下:
1.数据预处理得到观测序列:
抽取消费者的长度为t的历史商家消费数据{shop1,shop2,…,shopt}并对消费者的历史消费线下商家进行编号。然后根据时间顺序把消费数据按照商家编号转换成观测值序列(o1o2…ot)
2.初始化隐马尔可夫模型:
通过一个三元组参数就能确定一个隐马尔可夫模型,通常λ=(a,b,π)指代,分别包含转移矩阵a、混淆矩阵b和初始状态矩阵π。初始化一个隐马尔可夫模型即给参数a,b,π置随机初始值λ=(a1,b1,π1)。
3.使用baum-welch算法和观测序列(o1o2…ot)对模型进行迭代:
如图2所示,隐马尔可夫模型中的变量可分为2组。第一组是状态变量y={y1,y2,…,yn},其中yi表示第i时刻的系统状态。通常假定状态是隐藏的、不可被观测的,因此状态变量也被称为隐变量。第二组是观测值变量x={x1,x2,…,xn},其中xi表示第i时刻的观测值。在隐马尔可夫模型中,系统通常在多个状态s={s1,s2,…,sn}之间转换,因此状态变量yi的取值范围通常是有n个取值的离散空间。
baum-welch算法是为了解决隐马尔可夫模型的参数估计问题而提出的。具体来说就是已知观测序列o=(o1o2…ot),估计参数模型λ=(a,b,π),使得该模型下观测概率p=(o|λ)最大。
baum-welch算法具体步骤:
输入:观测数据o=(o1,o2…ot)
输出:隐马尔可夫模型参数
(1)初始化:对于n=0,选取
(2)递推,对于n=1,2,…,
其中,aij=p(yt+1=sj|yt=si)bij=p(xt=oj|yt=si)πi=p(y1=si),
αt(i)为前向变量,即输出为(o1,o2…ot),在t时刻位于状态si的概率;βt(i)为后向变量,即时刻t状态为si后输出为(ot+1,ot+2…ot)的概率。
(3)终止,得到模型参数λ(n+1)=(a(n+1),b(n+1),π(n+1))
4.使用viterbi算法和训练好的模型,计算观测序列(o1o2…ot)对应的最优的状态序列。然后预测t+1时刻的最有可能的状态yt+1,然后计算t+1时刻概率最大的观测值。
viterbi算法是一种动态规划算法,可用于为给定的观测序列和模型找到最有可能的隐藏状态序列。
viterbi算法具体步骤:
输入:观测数据o=(o1,o2…ot)
输出:隐马尔可夫模型参数
输出:最优隐状态概率i=(i1,i2…it)
(1)初始化:δ1(i)=πibi(o1),1≤i≤nψ1(i)=0
(2)递推,对于t=2,3,…,t
其中,δt(i)是viterbi变量,ψt(i)是路径记忆变量。
(3)终止,
(4)回溯最优路径,t=t-1,t-2,…,1
it=ψt+1(it+1);
5.通过计算的t+1时刻概率最大的观测值ot+1并对照商家编号即可得到消费者在t+1时刻最有可能消费的线下商店shopt+1。
实验及结果:
为了验证该方法的预测效果,我们在一个真实的数据集上进行了实验。该数据集包含1057个不同的用户和2000个商家,每个用户拥有120次以上的消费记录。并且为了验证不同训练长度对预测结果的影响,我们选取了(20,40,60,80,100)五种不同的训练长度对这1057个用户进行实验。最终实验结果表明,我们的预测方法在训练长度为60时准确度最高,达到了82.02%,在训练长度为20时准确度最低,也有80.86%。同时我们也与最频繁项预测方法(mostfrequent,简称mf)和仅使用转移矩阵的隐马尔可夫预测方法(简称hmm-ptp)进行对比(如图3所示)。mf方法最高的预测准确率为81.23%,最低为80.24%;hmm-ptp方法的最高预测准确率为72.89%,最低为71.91%。由此可见,相对于其他两种预测方法,我们的方法能取得更好的预测效果。