目 录
- 挖掘目标
- 分析方法与过程
2.1. 总体流程
2.2. 具体步骤
• 步骤一:数据预处理
• 步骤二:群体聚类
• 步骤三:行为特征聚类
2.3. 结果分析
• 第一类:
• 第二类:
• 第三类: - 结论
- 参考文献
1. 挖掘目标
本次建模目标是在航空公司的海量会员数据中选择符合此研究方向的评价基础属性并分析与各属性之间的相关性,从而发现并选择相关属性集;构建反映客户价值评价指标体系,聚类出行为特征一致的客户,从而可对具有特定行为特征的群体进行相应的营销策略。
2. 分析方法与过程
2.1. 总体流程
主要包括如下步骤:
步骤一:数据预处理,根据经营策略选择评价属性,对所有属性与评价属性之间进行相关性分析,去除属性集中的弱相关项与冗余项从而达到数据简化的目的。
步骤二:群体聚类,用 K-means 算法将每个属性的原始数据划分为三个级(1,2,3),再由基于密度可达的 DBSCAN 算法进行客户聚类,将所有客户大体上分为高,中,低三个等级。
步骤三:行为特征聚类,用双聚类分别对步骤二的三个等级的聚类结果分别做行为特征聚类,采用基于了基于 apriori 的双聚类和 FP-growth 的双聚类。
步骤四:结果分析,挖掘最终聚类结果中的信息并提出相应的营销策略。
2.2. 具体步骤
• 步骤一:数据预处理 数据预处理
A. 数据简化
数据简化在对挖掘任务和数据本身内容理解的基础上,寻找依赖于挖掘目标的表达数据的有用特征,以缩减数据规模,从而在尽可能保持数据原貌的前提下最大限度地精简数据量。针对数据库中的属性进行属性选择[1].
B. 研究方向与分类属性选择
针对不同的经营策略,评价标准往往是不同的,因而客户细分的结果也不同。本文以航空公司营业额为研究背景,选择总售票价为分类属性[2](为原始数据中提供第一年和第二年的售票价的和),并基于此分类属性进行属性选择。
C. 数据均匀量化
由于原始数据中每个属性自身的数值差距与属性与属性之间的数值差距都很大,所以对原始数据按量化区间间隔进行均匀量化。即参照某个属性数值的整体跨度将此属性出于某一区间的所有值仅用一个数值代替。通过数据均匀量化,使下面进行属性选择时的时间复杂度与空间复杂度大幅减低,并减少属性间数值差距的影响。
D. 属性选择——基于卡方统计量
本算法利用卡方统计量度量每个属性与分类属性的相关性,按照相关性排列各个属性,并将属性划分为三个等级:强相关、相关、弱相关,去除弱相关属性及冗余重复属性,利用 等级临界值,选择出相互独立的属性[3]。
E. 算法思想
a) 利用列联表计算每个属性 Fi 与分类属性 C(本实验选择总票价作为分类属性)的卡方值Ki,C。
b) 根据 a 结果排列各个属性。
c) 将所有属性聚成三类,即强相关(Strong Relevant)子集、相关(Relevant)子集、弱相关(Weak Relevant)子集。确定最弱强相关(the Weakest of Strong Relevant)属性 FWoS 和最强弱相关(theStrongest of Weak Relevant)属性 FSoW。
d) 对于强相关属性子集 SSR,选择参照属性 Fi,遍历子集中的其它属性 Fj 计算 Ki,j;如果 Ki,j 大于或等于 KWoS,C,删除该属性,否则保留;将 Fi 放入强相关约简(the Reducof Strong Relevant)属性子集 SRSR;如果 SSR 不空,继续 d。
e) 对相关属性子集 SR 中的所有属性 Fi 对强相关约简属性子集 SRSR 中的每个属性 Ki,如果Ki,j 大于 KSoW,C,将 Fi 删除;如果 Fi 未被删除,将 Fi 放到相关约简(the Reduct of Relevant)属性子集 SRR 中;
f) 将弱相关属性子集 SWR 删除。
F. 算法实现
根据上一点的算法思想,这里给出在 matlab 平台上实现本算法的伪代码。为减少建立列联表时占用过多的资源,已将每个属性的原始数据梯度量化。
输入:S(F0,F1,F2…FN)// 梯度量化后的属性子集
C // 分类属性(总票价属性)
输出:S’ // 相关属性集
a) For i=1:N
T=Table(Fi,C); // 形成属性 Fi 与分类属性 C 的列联表
Ki=Calculate(T); // 利用列联表计算卡方值Ki
b) Sort(S) // 将a)得出的 Ki 按顺序排列
c) Rank(S) // 通过 K-means 算法将 S 聚为三类,得到 SSR(强相关集),SR(相关集)和 SWR(弱相关集)
d) F=GetFirst(SSR)
while(Fp≠ NULL) //去除强相关属性子集中的冗余属性
{
Fq= GetNext(SSR, Fp); //取子集中下一个元素
while(Fq≠ NULL)
{
tp,q= Table(Fp, Fq);
Kp,q= Calculate(tp,q);
Fq′ = Fq;
if(Kp,q≥WSδo)
Delete(SSR, Fq); //删除子集中的当前属性
Fq= GetNext(SSR, Fq′);
}
Fp= GetNext(SSR, Fp);
}
e) F=GetFirst(SR)
while(Fp≠ NULL)
{
Fp′ = Fp;
Fq= GetFirst(SSR);
while(Fq≠ NULL)
{
tp,q= Table(Fp, Fq);
Kp,q= Calculate(tp,q);
if(Kp,q>SWδo)
{
Delete(SR, Fp)