本篇说明

上前一篇内容“描述性统计分析:考试成绩分析”,已经把“19级财管管理会计”科目考试成绩进行了描述性统计分析。想必您已经对成绩总体情况,以及分班级成绩情况有了基本的了解。

然而,在分析最后,我进行了hist和kde分析并画出了便于大家认知的统计图。那么,画出hist和kde的目的是什么呢?在上文并没有进行分析和说明。其实质是为了本文进行分布拟合和预测做前导。

本文将在前一篇“描述性统计分析:考试成绩分析”基础之上,继续做分析。

主要完成以下几个重要任务,这几个点也是经济类、管理类专业做数据分布拟合和预测的痛点。

  • 成绩数据经验分布的猜想;
  • 根据猜想对成绩数据进行猜想分布的拟合;
  • 对分布进行检验;
  • 预测。

如果不清楚前因,请先阅读前文:

“描述性统计分析:考试成绩分析”

对分布的经验判断

import numpy as np import pandas as pd from scipy.stats import beta ,kstest import matplotlib.pyplot as plt import seaborn as sns df = pd.read_excel('19财管管理会计成绩.xlsx') data =df['glkj'].tolist()

该数据集为excel表格"19财管管理会计成绩.xlsx":

  • class:班级。19财管1—19财管6。分类变量。
  • glkj:管理会计,该科目考试成绩。可度量变量。
  • 成绩整体分布情况,在前一篇文中已经介绍过,不清楚的可以查阅前一篇内容。
  • 对该图分布进行经验分析和判断:从图上可以清楚的看到,分布的特征是严重“左偏”,峰值附近分布很窄,收尾很快。
  • 有这种特征的分布有很多:beta分布、genextreme分布等。

感兴趣的话,可以对不限于上面两种分布进行拟合,形态如下图所示:

基于经验的判断:拟合beta分布

a_glkj, b_glkj, loc_glkj, scale_glkj = beta.fit(data) #a_glkj, b_glkj, loc_glkj, scale_glkj为拟合beta分布返回的分布参数值。

  • 结果:

(a_glkj, b_glkj, loc_glkj, scale_glkj)
(91.93, 1.65, -564.81, 665)

分布检验:Kolmogorov-Smirnov test

cdf = stats.beta.cdf stats.kstest(rvs=data, cdf, args=(a_glkj, b_glkj, loc_glkj, scale_glkj), N=20, alternative='two-sided', mode='auto')

  • 结果:

KstestResult(statistic=0.05016, pvalue=0.3581)

  • p>0.05:在0.05水平上,没有理由说它不服从beta分布。
  • 即:19财管管理会计成绩符合beta分布。
  • 分布参数为:

(a_glkj, b_glkj, loc_glkj, scale_glkj)

(91.93, 1.65, -564.81, 665)

给定参数的理论分布:beta

bins=np.linspace(start=data.min(), stop=data.max(), num=30, endpoint=True) ax1= sns.distplot(data,bins=bins, norm_hist=True,hist=True, kde=False,label='19财管管理会计成绩hist') plt.legend(loc='best') x = np.linspace(data.min(), data.max(), 100) y = beta.pdf(x, a_glkj, b_glkj, loc_glkj, scale_glkj) ax1 = plt.plot(x, y, 'c', linewidth=3, label='19财管管理会计成绩pdf') plt.legend(loc='best')

根据理论分布进行预测

  • beta分布:给定参数下的理论 pdf

fig, ax = plt.subplots(1, 1) mean, var, skew, kurt =beta.stats(a_glkj,b_glkj,loc_glkj,scale_glkj, moments='mvsk') min_x = beta.ppf(0.001, a_glkj, b_glkj, loc_glkj, scale_glkj) max_x = beta.ppf(0.999, a_glkj, b_glkj, loc_glkj, scale_glkj) x = np.linspace(start= min_x, stop= max_x, num= 400,endpoint=True) y = beta.pdf(x, a_glkj, b_glkj, loc_glkj, scale_glkj) ax.plot(x, y,'r-', lw=3, alpha=0.4, label='19财管管理会计成绩beta pdf') ax.legend(loc='best')

  • beta分布:给定参数下的理论 cdf

z = beta.cdf(x, a_glkj, b_glkj, loc_glkj, scale_glkj) plt.plot(x, z ,'r-', lw=3, alpha=0.4, label='19财管管理会计成绩beta cdf') plt.legend() plt.show()

预测

  • 预测:分数<=X分的概率

beta.cdf([43,60,80,90,100], a_glkj, b_glkj, loc_glkj, scale_glkj)

结果:array([0.001, 0.01, 0.13, 0.43, 0.97])

按既定的数据分布预测,考60分以下的概率仅仅为1%。如此低的不及格率。

  • 预测:概率=X% 下的分数

beta.ppf([0.001, 0.5, 0.999], a_glkj, b_glkj, loc_glkj, scale_glkj)

结果:array([ 41.81, 90.65, 100])