星座属性单变量分析
import pandas as pd
import numpy as np
ft_zodiac = pd.read_csv('ft_zodiac.txt')
print(ft_zodiac.shape)
ft_zodiac.head()
结果:
zodiac_label = pd.read_csv('zodiac_label.txt')
#这里去除标签为2的数据
ft_label = zodiac_label[zodiac_label.label != 2]
ft_label.head()
结果:
pd15作为好坏的分割节点。>15为坏人,<15为好人?
15天以上的人为坏,5天以内的人为好人,中间的人不用管了
data = pd.merge(ft_label,ft_zodiac,on = 'order_id',how = 'inner')
data.head()
结果:
计算一下每个星座的bad rate
#用集合将出现的值存起来
zodiac_list = set(data.zodiac)
chinese_zodiac_list = set(data.chinese_zodiac)
#创建字典,来表示星座及对应的坏账率
zodiac_badrate = {}
for i in zodiac_list:
total = data[data.zodiac == i]
bad = total[total.label == 1]['label'].count()
good = total[total.label == 0]['label'].count()
zodiac_badrate[i] = round(bad/(bad + good),3)
zodiac_badrate
结果:
f = zip(zodiac_badrate.keys(),zodiac_badrate.values())
f = sorted(f,key = lambda x : x[1],reverse = True)
zodiac_badrate = pd.DataFrame(f)
zodiac_badrate.columns = pd.Series(['星座','badrate'])
#可视化操作
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['figure.figsize'] = (8, 5)
x = zodiac_badrate['星座']
y = zodiac_badrate['badrate']
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set(title='变量星座与坏账率的关系',ylabel='badrate',xlabel='星座')
ax.set_ylim(0.08,0.16,0.05)
ax.plot(x, y, color='blue', linewidth=3)
plt.show()
#或者
from pyecharts import Line
x = zodiac_badrate["星座"]
y = zodiac_badrate["badrate"]
line = Line("星座")
line.add(1,x,y)
结果:
决策树算法
决策树的生成只考虑局部最优,
决策树的剪枝则考虑全局最优。
信息增益的缺点——当特征的取值较多时,根据此特征划分更容易得到纯度更高的子集,因此划分之后的熵更低,由于划分前的熵是一定的,因此信息增益更大,因此信息增益比较偏向取值较多的特征。