MapReduce之使用马尔可夫模型的智能邮件营销(一)

MapReduce之使用马尔可夫模型的智能邮件营销(一)

背景

你是否经常网购,然后在某个特定的时间里(想要逛街/购物)收到商家/电子商务网站发来的优惠或新品商品的信息?你有是否经常充各种会员,也同样在特定的时间收到商家/网站发来的信息?
这便是马尔可夫模型的一种应用,在给定一组随机变量(如顾客的最近交易日期),马尔可夫模型只根据前一个状态(前一个最近交易日期)的分布只是该变量(最近交易日期)的分布。

马尔可夫链基本原理

令 S= { S 1 , S 2 , S 3 , . . . S_1,S_2,S_3,... S1,S2,S3,...} 是一个有限状态集合,希望获得以下概率:

P( S n ∣ S n − 1 , S n − 2 , . . . , S 1 S_n|S_{n-1},S_{n-2},...,S_1 SnSn1,Sn2,...,S1)

一阶马尔可夫假设如下:

P( S n ∣ S n − 1 , S n − 2 , . . . , S 1 ) ≈ P ( S n ∣ S n − 1 ) S_n|S_{n-1},S_{n-2},...,S_1) \approx P(S_n|S_{n-1}) SnSn1,Sn2,...,S1)P(SnSn1)

这个近似公式描述了马尔可夫性质,系统在时间t+1的状态只基于系统在时间t的状态

二阶马尔可夫假设如下:

P( S n ∣ S n − 1 , S n − 2 , . . . , S 1 ) ≈ P ( S n ∣ S n − 1 , S n − 2 ) S_n|S_{n-1},S_{n-2},...,S_1) \approx P(S_n|S_{n-1},S_{n-2}) SnSn1,Sn2,...,S1)P(SnSn1,Sn2)
下面使用马尔可夫假设描述联合概率:

P( S 1 , S 2 , . . . , S n ) = ∏ i = 1 n P ( S i , S i − 1 ) S_1,S_2, . . . ,S_n)= \prod_{i=1}^n P(S_i,S_{i-1}) S1,S2,...,Sn)=i=1nP(Si,Si1)

马尔可夫随机过程可以总结如下:

  • 如果一个随机序列的分布仅由其当前状态确定,则具有马尔可夫性质,具有这个性质的随即过程则为马尔可夫随即过程
  • 对于可观察的状态序列,可以得到一个马尔可夫链模型,使用这个模型预测下一个有效日期
  • 对于不可观察状态,会得到一个隐式马尔可夫模型

在接下来的过程中,使用如下的马尔可夫链的形式化表示,马尔可夫链包括3个部分:
状态空间
       有限状态集S={ S 1 , S 2 , S 3 , . . . , S_1,S_2,S_3 , . . . , S1,S2,S3,...,}

转移概率
       函数 f f f:S × \times × S → \rightarrow R:

  • 0 ≤ f ( a , b ) ≤ \leq f(a,b)\leq f(a,b) 1 (对于所有的 a , b ∈ S a,b\in S a,bS
  • ∑ b ∈ S f ( a , b ) = 1 \sum_{b\in S} f(a,b)=1 bSf(a,b)=1 (对于各个 a ∈ S a\in S aS

初始分布
       函数 g : S × R : g: S\times R: g:S×R:

  • 0 ≤ g ( a ) ≤ 1 0\leq g(a) \leq 1 0g(a)1 (对于各个 a ∈ S a \in S aS)
  • ∑ a ∈ S g ( a ) = 1 \sum_{a\in S} g(a)=1 aSg(a)=1

则马尔可夫链是S中的一个随即过程:

  • 时间0时,这个链的状态用分布函数 g g g 描述
  • 如果时间 t 时的马尔可夫链状态为 a ,则时间 t+1 时,对于各个 b ∈ S b\in S bS,其状态为b的概率为 f ( a , b ) f(a,b) f(a,b)

来看下面的一个例子,假设一个城市的天气变化包括4中状态——晴天,雨天,多云,有雾, 进一步假设一天中天气状态不会改变,如下图

城市天气变化表

今天天气明天天气晴天雨天多云有雾
晴天0.60.10.20.1
雨天0.50.20.20.1
多云0.10.70.10.1
有雾0.00.30.40.3

其中,每行概率之和为1.00
现在有以下问题:

  • 如果今天的天气状态是晴天,那么明天多云而且后天有雾的概论是多大?
            P ( S 2 = c l o u d y , S 3 = f o g g y ∣ S 1 = s u n n y ) P(S_2=cloudy,S_3=foggy|S_1=sunny) P(S2=cloudy,S3=foggyS1=sunny)
         = P ( S 3 = f o g g y ∣ S 2 = c l o u d y , S 1 = s u n n y ) × P ( S 2 = c l o u d y ∣ S 1 = s u n n y ) P(S_3=foggy|S_2=cloudy,S_1=sunny) \times P(S_2=cloudy|S_1=sunny) P(S3=foggyS2=cloudy,S1=sunny)×P(S2=cloudyS1=sunny)
         = P ( S 3 = f o g g y ∣ S 2 = c l o u d y ) × P ( S 2 = c l o u d y ∣ S 1 = s u n n y ) P(S_3=foggy|S_2=cloudy) \times P(S_2=cloudy|S_1=sunny) P(S3=foggyS2=cloudy)×P(S2=cloudyS1=sunny)
         =0.1*0.2
         =0.02

  • 如果今天有雾,那么两天后有雨的概率是多大?
            P ( S 3 = f o g g y ∣ S 1 = f o g g y ) P(S_3=foggy|S_1=foggy) P(S3=foggyS1=foggy)
         = P ( S 3 = f o g g y , S 2 = s u n n y ∣ S 1 = f o g g y ) + P ( S 3 = f o g g y , S 2 = c l o u d y , ∣ S 1 = f o g g y ) + P ( S 3 = f o g g y , S 2 = r a i n y ∣ S 1 = f o g g y ) + P ( S 3 = f o g g y , S 1 = f o g g y ∣ S 1 = f o g g y ) P(S_3=foggy,S_2=sunny|S_1=foggy)+ P(S_3=foggy,S_2=cloudy,|S_1=foggy)+ P(S_3=foggy,S_2=rainy|S_1=foggy)+ P(S_3=foggy,S_1=foggy|S_1=foggy) P(S3=foggy,S2=sunnyS1=foggy)+P(S3=foggy,S2=cloudy,S1=foggy)+P(S3=foggy,S2=rainyS1=foggy)+P(S3=foggy,S1=foggyS1=foggy)
         = P ( S 3 = f o g g y ∣ S 2 = s u n n y ) × P ( S 2 = s u n n y ) ∣ S 1 = f o g g y ) + P ( S 3 = f o g g y ∣ S 2 = c l o u d y ) × P ( S 2 = c l o u d y ) ∣ S 1 = f o g g y ) + P ( S 3 = f o g g y ∣ S 2 = r a i n y ) × P ( S 2 = r a i n y ) ∣ S 1 = f o g g y ) + P ( S 3 = f o g g y ∣ S 2 = f o g g y ) × P ( S 2 = f o g g y ) ∣ S 1 = f o g g y ) P(S_3=foggy|S_2=sunny) \times P(S_2=sunny)|S_1=foggy)+ P(S_3=foggy|S_2=cloudy) \times P(S_2=cloudy)|S_1=foggy)+ P(S_3=foggy|S_2=rainy) \times P(S_2=rainy)|S_1=foggy)+ P(S_3=foggy|S_2=foggy) \times P(S_2=foggy)|S_1=foggy) P(S3=foggyS2=sunny)×P(S2=sunny)S1=foggy)+P(S3=foggyS2=cloudy)×P(S2=cloudy)S1=foggy)+P(S3=foggyS2=rainy)×P(S2=rainy)S1=foggy)+P(S3=foggyS2=foggy)×P(S2=foggy)S1=foggy)
         = 0.1 × 0.0 + 0.1 × 0.4 + 0.1 × 0.3 + 0.3 × 0.3 0.1 \times 0.0 + 0.1 \times 0.4 + 0.1 \times 0.3 + 0.3 \times 0.3 0.1×0.0+0.1×0.4+0.1×0.3+0.3×0.3
         = 0.00 + 0.04 + 0.03 + 0.09 0.00+0.04+0.03+0.09 0.00+0.04+0.03+0.09
         = 0.16 0.16 0.16

在接下来的过程中,主要使用Mapreduce计算框架建立一个这样的模型(即转移概率表),可以定义所有的 a ∈ S a\in S aS f ( a , b ) f(a,b) f(a,b),一旦成功创建这个模型,其余任务就容易了

MapReduce解决方案如下

  • 阶段1:使用历史训练数据建立一个模型
  • 阶段2:使用阶段1建立的模型对新数据作出预测

使用Mapreduce的马尔可夫模型

假设有顾客交易的历史数据,包括交易ID,顾客ID,交易日期,金额,每个输入记录的格式如下:
< customerID>,< transactionID>,< ,>< purchaseDate>< ,>< amount>
整个解决方案包括三个Mapreduce作业和一个Java程序,解决方案的概要描述如下:

  • 1.使用一个程序或脚本生成虚拟顾客数据
  • 2.MapReduce投影接受顾客数据作为输入,生成有序序列,有序序列包括按升序排序的交易日期。
  • 3 . 状态转换器接受这个有序数据,生成状态序列。
  • 4.MapReduce马尔可夫状态转移模型接受这个状态序列作为输入,生成一个马尔可夫链模型,利用这个模型对下一个状态进行预测
  • 5, 使用Java程序对顾客数据和马尔可夫链进行预测

在下一篇博客中,讲解如何利用Mapreduce生成时序交易序列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值