当前位置:   article > 正文

python 广义似然比_回归五式第三式:定序回归——手机功能对消费者偏好的影响分析(内含报告和Python、R代码)...

如何进行消费偏好调查数据的回归分析报告

f41987ade31796eefa9d9e6171cf7e98.png

0 目录

1.简单分析报告

2.具体操作

(1)数据读取和处理

(2)描述性分析

(3)假设检验与参数估计

(4)模型选择

(5)预测和评估

3.代码和数据集链接

4.参考文献

正文

1 简单分析报告

手机功能对消费者偏好的影响分析

内容提要 研究消费者对新功能的偏好,对于手机厂商来说有着特别重要的意义。本报告利用消费者对手机的评分数据,对手机功能在不同功能组合中所起到的作用进行精确的数量化分析。我们的分析结果发现,手机品牌、数码相机功能、收看电视功能、手写笔、电话本多条记录、MP3这些因素会显著地影响消费者的喜好程度,尤其是电话本能否多条记录的影响最大。根据本报告的模型及结论,厂商可以选择合理的市场策略来开发手机的新功能。

一、研究目的

目前国内手机销售市场竞争日趋激烈,为了确立在市场中的相对优势地位,开发新功能是企业常常采用的手段。因为与开发新产品相比,在现有产品的基础上增加新功能不失为一种既快速又有效的方式。当企业决定为现有产品增加新功能时,往往面对众多选择。根据消费者的行为特征,消费者在进行购买决策时愿意支付的价格主要依赖于对产品的偏好,而不是企业的生产成本。因此,研究消费者对新功能的偏好对于手机厂商就有着特别重要的意义。本分析报告对手机功能在不同组合中所起到的作用进行精确的分析,建立合理的统计模型,并根据分析报告提出合理的建议。

二、数据来源和相关说明

本报告的数据来源是对北京大学光华管理学院的MBA学生和高级经理培训班的学员的调查。首先,我们选取商务手机厂商较多考虑的六个功能,然后加上品牌(这里我们只涉及诺基亚、摩托罗拉、三星和波导四个品牌)共七个要素,构成我们要研究的影响消费者偏好的要素。具体来说,包括手机品牌、数码相机功能、收看电视功能、手写笔、电话本多条记录、MP3和游戏数目。我们将这七个要素按不同方式组合成12个产品组合,再针对不同的组合进行偏好调查。对每个组合,调查对象根据其偏好程度用5分量表进行打分(1 = 根本不喜欢;2 = 比较不喜欢;3 = 一般喜欢; 4 = 比较喜欢; 5 = 非常喜欢)。基于我们调查的结并做适当的数据清理,最后共获得来自148个调查对象的1451个有效观测值。各个变量的具体取值见表1-1,不同的功能组合见表1-2。

1bf8b3d67b6b12ccb167fe5f5a45e7d8.png

9096123a4fe18d5eeb3f036418b607a9.png

从表1-1和表1-2中可以看到,因变量是离散型的变量,而且是定序变量。而自变量是各种组合所涉及的七个因素,既有连续型数据,又有离散型数据。

三、描述性分析

为了获得对数据的整体认识,并注意到因变量为定序变量的特点,我们首先用列联表考察消费者打分和不同品牌之间的关系,如表1-3所示。

577bfdcde4e1b5089e045065d1d170a9.png

从中我们可以看到,在所有得分为1或2的品牌中,频数最高的是波导,其频数分别为37和80;在得分为3的品牌中,摩托罗拉频数最高,为138;在得分为4的品牌中,诺基亚频数最高,为116;在得分为5的品牌中,三星频数最高,为44。由此可见,国产品牌在与国际品牌的对比中具有较大的劣势,而在国际品牌中,摩托罗拉偏向大众化路线,而诺基亚偏向中高端市场。

我们再对消费者打分和手机有无数码相机之间的关系予以简单的分析,如图1-1所示。

35517ba3cdc01ab8e5463fd80c485af6.png

从总体上来讲,我们可以看到一个明显的上升趋势。具体地说,得分越高的手机,具有数码相机功能的比率越高,特别是在比较不喜欢(score = 2)到比较喜欢(score = 4)之间。这从一个侧面说明,有无数码相机功能在当时是一个界定人们打分是否高于平均水平的重要属性。

对其他几个定性因素,我们做类似的分析,如图1-2所示。

bcaf22ec8f85b65456c0f30d57ae4da3.png

从(a)、(c)图可以看到,能否收看电视(W3)以及电话本是否支持多条记录(W5)同消费者打分(score)高度正相关。而从图(b)、(d)可以看出,有无手写笔(W4)和是否支持MP3功能(W6)在我们的样本中并没有受到很大的青睐。

最后,我们考察消费者打分(score)和游戏个数(W7)之间的相互关系,得到列联表1-4。

3bf2d31ee4dd5a662556944c973a9b55.png

从表1-4中很难看出明显的趋势,因此,游戏个数同消费者打分之间没有明显的关系。

四、数据建模

考虑因变量为定序变量的特点,我们采用probit定序回归和logit定序回归的方法建立模型。我们首先用probit定序回归的方法对包含全部自变量的全模型进行卡方检验,如表1-5所示。

571cb242e634e34a5ebfa1239928a03a.png

相应的参数估计结果如表1-6所示。

80f476e2b525f384f89d2615efba558a.png

从表1-6中我们可以看到,广义似然比的模型显著性检验的P值非常小(P值 < 0.001 ),表明该模型是显著的,即我们所考虑的七个解释性变量中,至少有一个对消费者有显著的影响。进一步通过对各个自变量所对应的Z检验的考察,我们可以得到以下重要结论:

  • 手机品牌对消费者打分有显著的影响。具体地说,在四个品牌中消费者对波导的偏好程度显著低于其他品牌。而且,消费者对诺基亚的偏好程度最高(系数最大)。这可以认为是不同品牌机制的某种体现。但是,除波导以外的三个品牌之间的差异在统计上是否显著,我们就不得而知了。
  • 除了游戏数目以外,其他因素都能够显著地影响消费者的喜好程度,尤其是电话本能否多条记录的影响程度最大,它的系数为0.90。而且需要注意的是,这些有显著影响的功能的系数都为正数,也就是说,这些功能增加了消费者的喜好程度。
  • 结合我们的调查对象主要是商务人士的特点,我们可以知道,游戏数目对消费者(尤其对商务人士)的喜好程度影响不大。

类似地,我们用logit定序回归的方法得出了和probit定序回归非常相似的结论。具体地说,全模型卡方检验结果如表1-7所示。

e8849adc226ca1d38bf8dd1bfdcfe67b.png

从中我们发现,手机品牌、有无数码相机、能否收看电视、有无手写笔、电话本能否支持多条记录,还有有无MP3都是影响消费者对手机偏好程度的重要因素。而游戏数目是唯一一个对消费者偏好程度无显著影响的手机属性。对该逻辑回归模型的参数估计如表1-8所示。

09508d1f01f5a93660fa7734742c89ed.png

2. 模型选择

以上的分析结果已经告诉我们,我们所选取的手机功能确实对消费者打分有一定的解释能力。但是全模型过于复杂,而且其中还有部分变量是不显著的。为了得到一个尽量简单同时又具有良好预测能力的模型,我们采用AIC和BIC的模型选择标准来选择一个最优的模型。对logit定序回归模型,我们用AIC方法选出的模型及其估计结果如表1-9所示。

1233f8f45699f988751b0b526a785285.png

采BIC方法得到的模型和AIC完全一致。另外值得注意的是,该模型就是从全模型中剔除不显著的变量后得到的模型,而且两个模型的系数估计值和全模型显示出相同的规律,即同样的符号和同样的大小顺序。因此,我们可以认为该结论是可靠的。具体地说,所有这些模型都认为,除了游戏数目以外,其他的解释性变量都同消费者的喜好显著相关。

对probit定序回归作类似的模型选择,我们发现结果同probit的AIC模型选择同logit定序回归一致,而probit的BIC模型排除了有无MP3(W6)这个变量。出于保守起见,我们暂时保留W6。所以,最终确认W1~W6六个因素确实显著地影响着消费者对于手机的喜好程度。

3. 模型预测与评估

建立模型的一个重要目的就是作预测。我们用logit定序回归中AIC所选出的模型对新的观测予以预测。对每一个消费者打分(score = 1, ... , 5),我们可以计算其各自的概率,然后选取概率最大的打分作为最终的预测。我们对全部的检验数据进行预测,结果如表1-10所示。

973c23622bd6d58c7ab1dc5c963c886d.png

我们看到有15个数据真实得分为3,预测结果也是3。类似地,有13个数据真实得分为4,而预测结果为3。我们总共有3+15+10=28个数据获得了完全准确的预测,有3+13+7+2+10+10=45个数据的预测误差为1个单位,只有5+12+9+1=27个数据的预测误差超过了1个单位,这部分数据占整个检验样本的27%。这表明模型的预测结果还是比较令人满意的。

五、结论和建议

从上述分析结果可知,不同的手机功能确实对消费者的喜好程度有一定的解释和预测能力。具体来说,手机品牌、数码相机功能、收看电视功能、手写笔、电话本多条记录、MP3这六个因素会显著地影响消费者的喜好程度,尤其是电话本能否多条记录的影响最大。根据本报告的模型及结论,厂商可以选择合理的市场策略来开发手机的新功能。例如,由于手机中的游戏数目对于消费者的喜好程度没有显著的影响,因此手机厂商在开发新功能时,同等成本下就不应该添加游戏,而应该考虑添加其他的功能。另外,手机厂商还可以根据本报告中的模型对消费者对于不同的手机功能组合的喜好程度进行预测,进而制定合理的定价及广告宣传等市场策略。需要特别指出的是,由于本报告所使用的数据主要来自于商务人士,因此,所得出的结论也主要适用于商务人士。

2 具体操作

注意:这里用python代码进行描述性分析。因为python没有直接进行定序回归的包,所以用R来做假设检验、参数估计、模型选择和预测评估。

(1)数据读取

读取数据:

  1. import numpy as np
  2. import pandas as pd
  3. %matplotlib inline
  4. path = r'D:Documentspython_documentsPractical Business Data AnalysiscaseCH5ceilphone.csv'
  5. data = pd.read_csv(path)
  6. data.head()

输出前五行如下:

24e24d70f7f93d9223e7617dbedddfe3.png

(2)描述性分析

查看样本数:

len(data)          #样本数为1451

输出:

107d407df12af49cf20bbccbfab031dd.png

查看数据类型:

data.info()

输出:

c04690c88b266088aea8df4e664927b5.png

用列联表考察消费者打分和不同品牌之间的关系:

pd.crosstab(data.score,data.W1)

输出:

8bb00a13356d04a765220bda7f9adde8.png

可见:在所有得分为1或2的品牌中,频数最高的是波导,其频数分别为37和80;在得分为3的品牌中,摩托罗拉频数最高,为138;在得分为4的品牌中,诺基亚频数最高,为116;在得分为5的品牌中,三星频数最高,为44。由此可见,国产品牌在与国际品牌的对比中具有较大的劣势,而在国际品牌中,摩托罗拉偏向大众化路线,而诺基亚偏向中高端市场。

列联表看得分(score)与游戏个数W7的关系:

pd.crosstab(data.score,data.W7)

输出:

320c70a9b457fcfdfbd4fada52a74bea.png

可见:游戏个数同消费者打分之间没有明显的关系。虽然我们不能就此断定游戏个数同人们对手机的打分没有关系,但是我们可以猜测即使相关,那么关系也不会很大。

再对消费者打分和手机有无数码相机之间的关系予以简单的分析:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. import seaborn as sns
  4. from matplotlib.font_manager import FontProperties #显示中文,并指定字体sns.set(font=myfont.get_name(), style="white")
  5. myfont=FontProperties(fname=r'C:/Windows/Fonts/simhei.ttf',size=14)
  6. sns.set(font=myfont.get_name(), style='white') #seaborn解决中文乱码的问题
  7. plt.rcParams['axes.unicode_minus']=False #显示负号
  8. plt.rcParams['figure.figsize'] = (6.0, 4.0) #调整图片大小
  9. W2_0 = data['W2'].groupby(data.score).value_counts()[:,0] #无数码相机时不同得分各自对应的数量
  10. W2_1 = data['W2'].groupby(data.score).value_counts()[:,1] #有数码相机时不同得分各自对应的数量
  11. a = pd.concat([W2_0, W2_1], axis=1)
  12. a.columns = ['W2_0', 'W2_1']
  13. p = plt.plot(a.index, a.W2_1/(a.W2_0+a.W2_1), linestyle="-")
  14. plt.ylabel('具有数码相机功能的比率', fontsize=16)
  15. plt.xlabel('消费者打分', fontsize=16)
  16. plt.xticks(a.index, ('1', '2', '3', '4', '5'), fontsize=16) #设置x刻度值的字体大小
  17. plt.yticks(np.arange(0, 1, 0.2), fontsize=16) #设置y轴刻度值的字体大小
  18. plt.show()

输出:

468b0498a46fcd0046c6730a7838381e.png

查看消费者得分与其他功能之间的关系:

  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. import seaborn as sns
  5. sns.set() #设置seaborn默认格式
  6. from matplotlib.font_manager import FontProperties #显示中文,并指定字体
  7. myfont=FontProperties(fname=r'C:/Windows/Fonts/simhei.ttf',size=14)
  8. sns.set(font=myfont.get_name(), style="white") #seaborn解决中文乱码的问题
  9. plt.rcParams['axes.unicode_minus']=False #显示负号
  10. plt.rcParams['figure.figsize'] = (13, 10) #设定图片大小
  11. f = plt.figure() #确定画布
  12. f.add_subplot(2,2,1)
  13. W3_0 = data['W3'].groupby(data.score).value_counts()[:,0]
  14. W3_1 = data['W3'].groupby(data.score).value_counts()[:,1]
  15. W3_0,W3_1
  16. W3_S= pd.concat([W3_0, W3_1], axis=1)
  17. W3_S.columns = ['W3_0', 'W3_1']
  18. p1 = plt.plot(W3_S.index, W3_S.W3_1/(W3_S.W3_0+W3_S.W3_1), linestyle="-")
  19. plt.ylabel('能收看电视的比率', fontsize=16)
  20. plt.xlabel('消费者打分', fontsize=16)
  21. plt.xticks(a.index, ('1', '2', '3', '4', '5'), fontsize=16) #设置x刻度值的字体大小
  22. plt.yticks(np.arange(0, 1, 0.2), fontsize=16) #设置y轴刻度值的字体大小
  23. plt.title('(a)', fontsize=20)
  24. f.add_subplot(2,2,2)
  25. W4_0 = data['W4'].groupby(data.score).value_counts()[:,0]
  26. W4_1 = data['W4'].groupby(data.score).value_counts()[:,1]
  27. W4_0,W4_1
  28. W4_S= pd.concat([W4_0, W4_1], axis=1)
  29. W4_S.columns = ['W4_0', 'W4_1']
  30. p2 = plt.plot(W4_S.index, W4_S.W4_1/(W4_S.W4_0+W4_S.W4_1), linestyle="-")
  31. plt.ylabel('有手写笔的比率', fontsize=16)
  32. plt.xlabel('消费者打分', fontsize=16)
  33. plt.xticks(a.index, ('1', '2', '3', '4', '5'), fontsize=16) #设置x刻度值的字体大小
  34. plt.yticks(np.arange(0, 1, 0.2), fontsize=16) #设置y轴刻度值的字体大小
  35. plt.title("(b)", fontsize=20)
  36. f.add_subplot(2,2,3)
  37. W5_0 = data['W5'].groupby(data.score).value_counts()[:,0]
  38. W5_1 = data['W5'].groupby(data.score).value_counts()[:,1]
  39. W5_0,W5_1
  40. W5_S= pd.concat([W5_0, W5_1], axis=1)
  41. W5_S.columns = ['W5_0', 'W5_1']
  42. p3 = plt.plot(W5_S.index, W5_S.W5_1/(W5_S.W5_0+W5_S.W5_1), linestyle="-")
  43. plt.ylabel('电话本支持多条记录的比率', fontsize=16)
  44. plt.xlabel('消费者打分', fontsize=16)
  45. plt.xticks(a.index, ('1', '2', '3', '4', '5'), fontsize=16) #设置x刻度值的字体大小
  46. plt.yticks(np.arange(0, 1, 0.2), fontsize=16) #设置y轴刻度值的字体大小
  47. plt.title("(c)", fontsize=20)
  48. f.add_subplot(2,2,4)
  49. W6_0 = data['W6'].groupby(data.score).value_counts()[:,0]
  50. W6_1 = data['W6'].groupby(data.score).value_counts()[:,1]
  51. W6_0,W6_1
  52. W6_S= pd.concat([W6_0, W6_1], axis=1)
  53. W6_S.columns = ['W6_0', 'W6_1']
  54. p4 = plt.plot(W6_S.index, W6_S.W6_1/(W6_S.W6_0+W6_S.W6_1), linestyle="-")
  55. plt.ylabel('有MP3的比率', fontsize=16)
  56. plt.xlabel('消费者打分', fontsize=16)
  57. plt.xticks(a.index, ('1', '2', '3', '4', '5'), fontsize=16) #设置x刻度值的字体大小
  58. plt.yticks(np.arange(0, 1, 0.2), fontsize=16) #设置y轴刻度值的字体大小
  59. plt.title("(d)", fontsize=20)
  60. #plt.subplots_adjust(wspace=0.3) #调整两幅子图的间距
  61. plt.tight_layout()
  62. plt.savefig('定序回归:4幅折线图.png',dpi=600) #保存png格式图片
  63. plt.show()

输出:

bcaf22ec8f85b65456c0f30d57ae4da3.png

从(a)、(c)图可以看到,能否收看电视(W3)以及电话本是否支持多条记录(W5)同消费者打分(score)高度正相关。而从图(b)、(d)可以看出,有无手写笔(W4)和是否支持MP3功能(W6)在我们的样本中并没有受到很大的青睐。

注意:因为python没有直接定序回归的包,下面步骤在R上操作。

(3)假设检验与参数估计

首先验证用广义似然比检验来验证模型的整体显著性:

进行probit定序回归的似然比检验:

  1. library(MASS)
  2. probit0 <- polr(as.factor(score)~1, method='probit', Hess=T)
  3. probit1 <- polr(as.factor(score)~W1 + W2 + W3 + W4 + W5 + W6 + W7, method='probit', Hess=T)
  4. anova(probit0, probit1)

输出:

5e8321e0ed22f2f435be07096e25bcde.png

上图P值为0,说明模型整体高度显著。即在probit定序回归下,至少有一个自变量与因变量(消费者打分)有显著的影响。

进行logit定序回归的广义似然比检验:

  1. library(MASS)
  2. logit0 <- polr(as.factor(score)~1, method='logistic', Hess=T)
  3. logit1 <- polr(as.factor(score)~W1 + W2 + W3 + W4 + W5 + W6 + W7, method='logistic', Hess=T)
  4. anova(logit0 , logit1)

输出:

6e978e20cd0a5142740baf801cd77b91.png

结论和probit定序回归一样,即logit定序回归模型也是整体高度显著的。

接下来用Z检验讨论各个自变量的显著性:

在probit定序回归下进行各个自变量的显著性的假设检验:

  1. library(car)
  2. Anova(probit1, type='III')

输出:

77c23c414b9123f13ed916d54e6dbdd3.png

说明除W7变量(游戏数目)外,在0.01显著水平下,其他变量都是显著的。

接着在probit定序回归下进行参数估计:

summary(probit1)

输出:

ea0d1253d7d4153e291fbafaedb10fc7.png

得到以下重要结论:

  • 手机品牌对消费者打分有显著的影响。具体地说,在四个品牌中消费者对波导的偏好程度显著低于其他品牌。而且,消费者对诺基亚的偏好程度最高(系数最大)。这可以认为是不同品牌机制的某种体现。但是,除波导以外的三个品牌之间的差异在统计上是否显著,我们就不得而知了。
  • 除了游戏数目以外,其他因素都能够显著地影响消费者的喜好程度,尤其是电话本能否多条记录的影响程度最大,它的系数为0.90。而且需要注意的是,这些有显著影响的功能的系数都为正数,也就是说,这些功能增加了消费者的喜好程度。
  • 结合我们的调查对象主要是商务人士的特点,我们可以知道,游戏数目对消费者(尤其对商务人士)的喜好程度影响不大。

再对logit定序回归进行各个自变量显著性的假设检验:

Anova(logit1, type='III')

输出:

bb7ec9e8b155ad76e5726f4d627db5bc.png

结果和probit的Z检验一致。

接着logit定序回归的参数估计:

summary(logit1)

输出:

8f96caa10bcdd74200b2e269154a18f5.png

可见logit和probit定序回归基本结论一致。因为logit定序回归和probit定序回归都认为W7(游戏数目不显著),下面剔除W7分别进行logit、probit定序回归:

首先剔除W7(游戏数目)进行probit定序回归:

  1. probit2 <- polr(as.factor(score)~W1 + W2 + W3 + W4 + W5 + W6, method='probit', Hess=T)
  2. summary(probit2)

输出:

3effb1303d8b6a20488ce4f3013cde5d.png

然后剔除不显著的W7,重新拟合logit定序回归:

  1. logit2 <- polr(as.factor(score)~W1 + W2 + W3 + W4 + W5 + W6, method='logistic', Hess=T)
  2. summary(logit2)

输出:

7ce1638ad6334b11f0c993ff2def72c5.png

(4)模型选择

logit定序回归的AIC模型选择:

  1. logit.aic <- step(logit1, trace=F)
  2. summary(logit.aic)

输出:

2b91a04258d132f2711afdd35d484fab.png

logit定序回归的BIC模型选择:

  1. logit.bic <- step(logit1, trace=F, k=log(length(data[,1])))
  2. summary(logit.bic)

输出:

a7dbb5faf262a350e40f4edf11addce0.png

发现:logit进行AIC和BIC模型选择后,系数完全一致。

下面probit定序回归的AIC模型选择:

  1. probit.aic <- step(probit1, trace=F)
  2. summary(probit.aic)

输出:

5d70e9384cbb5aa594e2b6547343ecda.png

下面probit定序回归的BIC模型选择:

  1. probit.bic <- step(probit1, trace=F, k=log(length(data[,1])))
  2. summary(probit.bic)

输出:

9d6efd8e7af966d5811bbe3312080d69.png

注意到probit定序回归的AIC选择的变量和logit模型选择(包括AIC与BIC)一致,但是probit定序回归BIC选择的变量中去掉了W6(有无MP3功能)。这里为保守起见,暂时保留W6。

(5)预测和评估

这里选择logit定序回归的AIC模型进行预测,数据集选用不同于建模的新数据集。预测的原理是对每一个消费者打分(score = 1, ... , 5)计算其各自的概率,然后选取概率最大的打分作为最终的预测。

  1. data_new <- read.csv('D:/Documents/python_documents/Practical Business Data Analysis/case/CH5/new.csv')
  2. data_new[c(1:5), ]

输出:

d49df06d5de964e49d862a463d1ccc63.png

列出整个预测情况如下表:

table(data_new[, c(1, 9)])

输出:

ee58aa4b575de1bd109e66e890f8aa51.png

这里纵轴表示真实打分,横轴表示预测情况。举例来说,15个数据真实得分为3,预测结果也是3。类似地,有13个数据真实得分为4,而预测结果为3。

此时,我们总共有3+15+10=28个数据获得了完全准确的预测,有3+13+7+2+10+10=45个数据的预测误差为1个单位,只有5+12+9+1=27个数据的预测误差超过了1个单位,这部分数据占整个检验样本的27%。这表明模型的预测结果还是比较令人满意的。

3.代码和数据集链接

nameli0722/Data-Analysis​github.com
7ba93309cd592a1b97ec991116cb89c5.png

4.参考文献nameli0722/Data-Analysis4.参考文献

(1)《应用商务统计》王汉生著,2011,北京大学出版社;

(2)《数据思维——从数据分析到商业价值》王汉生编著,2017,中国人民大学出版社。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/179875
推荐阅读
相关标签
  

闽ICP备14008679号