logistic回归分析

研究方法
量化研究
作者

yangjh

发布日期

November 13, 2023

“Logistic Regression”(回归分析)是一种用于建模二元结果概率的统计方法。这是一种适用于预测事件发生或不发生概率的回归分析类型。Logistic回归通常用于各个领域,包括统计学、机器学习和流行病学。

logistic回归模型

logistic回归模型

以下是关于logistic回归的一些关键点:

  1. 二元结果: Logistic回归用于因变量是二元的情况,这意味着它只有两种可能的结果,例如0或1、是或否、真或假。
  2. Sigmoid函数: 在logistic回归中,使用logistic函数(或Sigmoid函数)将任何实数映射到0到1之间的值。这很重要,因为输出可以解释为概率。
  3. 连接函数: Logistic回归使用“logit”连接函数来建模自变量与特定结果概率之间的关系。
  4. 自变量: 类似于其他形式的回归分析,logistic回归涉及一个或多个自变量,用于预测因变量的发生概率。
  5. 最大似然估计: Logistic回归中的参数使用最大似然估计(MLE)方法估计,该方法旨在最大化在估计模型下观察到给定结果的可能性。
  6. 比率比: Logistic回归提供比率比,表示一个组中事件发生的几率与另一个组中事件发生的几率之比。

Logistic回归分析的应用条件

  • 因变量为二项分类或多项分类资料。
  • 自变量可以是任意类型的资料,如定量资料、二分类资料、无序多分类资料或者有序分类资料等。

研究案例

  • 研究题目: 影响在线购物决策的因素
  • 目标: 通过回归分析探究各种因素对个体在线购物决策的影响,以提高电商平台的服务质量和用户体验。
  • 假设:
    • 商品价格越低,购物决策越可能为1。
    • 用户给予的评价分数越高,购物决策越可能为1。
    • 参与促销活动的用户,购物决策越可能为1。
    • 配送时间越短,购物决策越可能为1。
    • 年龄较年轻的用户,购物决策越可能为1。
    • 上月购物频率较高的用户,购物决策越可能为1。
  • 研究变量:
    • 因变量(依赖变量): 购物决策(二元变量,1表示购物,0表示不购物)。
    • 自变量(独立变量):
      • 商品价格
      • 用户评价分数
      • 促销活动参与与否(二元变量,1表示参与,0表示不参与)
      • 平均配送时间
      • 用户年龄
      • 上月购物频率
  • 数据收集:从一个大型电商平台获取用户的历史购物数据,包括购买商品的价格、用户给予的评价分数、是否参与促销活动、配送时间、年龄以及上月购物频率等信息。
  • 数据分析:通过 logistic 回归分析,获取各自变量的系数和 p 值,以评估它们对购物决策的影响程度和统计显著性。

数据分析

import pandas as pd
import statsmodels.api as sm

# Generated dataset
data = {
    '商品价格': [42.50, 78.99, 35.00, 55.99, 49.99, 60.00, 30.50, 65.99, 47.00, 53.99,
               39.99, 75.00, 29.50, 58.99, 43.00, 68.99, 51.00, 45.99, 63.50, 34.99,
               59.00, 37.00, 52.99, 48.00, 31.50, 56.99, 40.00, 72.50, 28.99, 54.00,
               # ... Continue with the rest of the data
              ],
    '用户评价分数': [4.7, 4.2, 4.5, 4.8, 4.3, 4.6, 4.1, 4.4, 4.9, 4.2,
                4.5, 4.8, 4.3, 4.6, 4.1, 4.4, 4.9, 4.2, 4.5, 4.8,
                4.3, 4.6, 4.1, 4.4, 4.9, 4.2, 4.5, 4.8, 4.3, 4.6],
    '促销活动参与': [1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1],
    '平均配送时间': [2.2, 3.5, 2.8, 2.0, 3.0, 2.5, 3.2, 2.7, 2.1, 3.8,
                 2.4, 2.3, 3.1, 2.6, 3.3, 2.9, 2.0, 3.6, 2.5, 2.2,
                 3.7, 2.8, 3.4, 2.3, 2.1, 3.9, 2.4, 2.3, 3.2, 2.7],
    '用户年龄': [30, 45, 28, 35, 40, 32, 38, 27, 33, 42,
              29, 36, 31, 26, 39, 34, 37, 41, 28, 30,
              44, 28, 43, 36, 33, 46, 29, 4, 36, 38],
    '上月购物频率': [4, 2, 3, 5, 1, 4, 2, 3, 5, 1,
                 4, 5, 2, 3, 1, 4, 5, 2, 3, 5, 1, 4, 1, 0, 3, 1, 4, 5, 1, 0],
    '购物决策': [1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1]
}

df = pd.DataFrame(data)

# Logistic regression model
X = df[['商品价格', '用户评价分数', '促销活动参与', '平均配送时间', '用户年龄', '上月购物频率']]
X = sm.add_constant(X)  # Add a constant term to the predictors
y = df['购物决策']

model = sm.Logit(y, X)
result = model.fit()

# Display the logistic regression summary
print(result.summary())

运行结果如下:

Optimization terminated successfully.
         Current function value: 0.154064
         Iterations 13
                           Logit Regression Results                           
==============================================================================
Dep. Variable:                   购物决策   No. Observations:                   30
Model:                          Logit   Df Residuals:                       23
Method:                           MLE   Df Model:                            6
Date:                Mon, 13 Nov 2023   Pseudo R-squ.:                  0.7656
Time:                        13:01:55   Log-Likelihood:                -4.6219
converged:                       True   LL-Null:                       -19.715
Covariance Type:            nonrobust   LLR p-value:                 3.624e-05
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
const       -148.2313    166.531     -0.890      0.373    -474.626     178.163
商品价格           0.1708      0.359      0.475      0.635      -0.533       0.875
用户评价分数        37.9425     45.536      0.833      0.405     -51.306     127.191
促销活动参与         2.4075      4.608      0.522      0.601      -6.625      11.440
平均配送时间         4.5588      7.350      0.620      0.535      -9.846      18.964
用户年龄          -0.8722      1.538     -0.567      0.571      -3.886       2.142
上月购物频率        -4.0813      6.971     -0.585      0.558     -17.743       9.581
==============================================================================

Possibly complete quasi-separation: A fraction 0.23 of observations can be
perfectly predicted. This might indicate that there is complete
quasi-separation. In this case some parameters will not be identified.

在解释 logistic 回归的结果时,我们主要关注各个自变量的系数(coefficient)以及其显著性(p-value)。以下是对结果的初步解释:

  1. const(截距项): -148.2313,这是模型在所有自变量为零时的购物决策的对数几率。然而,由于截距项的p-value较大(0.373),我们不能得出截距项对购物决策的显著影响。
  2. 商品价格(商品价格): 系数为0.1708,p-value为0.635。商品价格对购物决策的影响不显著。
  3. 用户评价分数(用户评价分数): 系数为37.9425,p-value为0.405。用户评价分数对购物决策的影响不显著。
  4. 促销活动参与(促销活动参与): 系数为2.4075,p-value为0.601。促销活动参与对购物决策的影响不显著。
  5. 平均配送时间(平均配送时间): 系数为4.5588,p-value为0.535。平均配送时间对购物决策的影响不显著。
  6. 用户年龄(用户年龄): 系数为-0.8722,p-value为0.571。用户年龄对购物决策的影响不显著。
  7. 上月购物频率(上月购物频率): 系数为-4.0813,p-value为0.558。上月购物频率对购物决策的影响不显著。

结论:

  • 从当前模型来看,自变量在统计上对购物决策的影响并不显著。
  • 模型的伪 R 方(0.7656)较高,说明模型对数据的解释程度较好,但这并不代表模型中的各个自变量都是显著的。
  • 警告信息指出可能存在完全拟合的情况,这需要进一步考虑。完全拟合可能导致模型过于灵活,对新数据的泛化性能下降。

请注意,这仅仅是一个初步的解释,进一步的优化和验证可能需要考虑其他因素,比如数据的特点、模型的假设检验等。

回到顶部