美文网首页
聚类HW---python实现

聚类HW---python实现

作者: 在做算法的巨巨 | 来源:发表于2018-08-14 22:58 被阅读0次

    题目
    一、场景
    HR想要分析员工的离职原因。(本数据集是造出来的,并非某公司的真实数据。)
    二、数据集简介
    字段包括:
    · Satisfaction Level
    · Last evaluation
    · Number of projects
    · Average monthly hours
    · Time spent at the company
    · Whether they have had a work accident
    · Whether they have had a promotion in the last 5years
    · Departments (column sales)
    · Salary
    · Whether the employee has left
    其中left字段是label, 1表示离职了,0表示没有离职。
    三、要求
    1、通过聚类算法将员工进行分类,并计算每种类别员工的离职率。
    2、通过调整聚类模型的参数,尝试找出离职率最高的一类员工。
    3、尝试分析离职率最高的这一类员工的特征


    这是第一次接触这类业务场景,在聚类算法在这块的应用中,开始时有一些不理解,很容易被监督学习的思维习惯带跑,在完成这次作业的过程中,逐渐对聚类的应用有了新的看法。

    数据:

    import pandas as pd
    data=pd.read_csv('C:\\RAM\\HR_comma_sep.csv')
    


    在这里我们发现sales和salary的数据特点时文本数据,因此我们需要建立虚拟变量dummies variable。


    dummiescolumns={
    'sales':1,'accounting':2,'hr':3,
    'technical':4,'support':5,'management':6,
    'IT':7,'product_mng':8,'marketing':9,
    'RandD':10,'low':1,'medium':2,'high':3}
    for column in ['sales','salary']:
        column1='量化'+column
        data[column1]=data[column].map(dummiescolumns)
    

    建立相关性矩阵

    import matplotlib
    font={
    'family':'SimHei'
    }
    matplotlib.rc('font',**font)
    pd.plotting.scatter_matrix(data,alpha=0.7,figsize=(10,10), diagonal='kde')
    
    data.corr()
    

    从可视化矩阵图和相关系数矩阵中可以看出,我们目前的特征都是相互独立。

    数据标准化

    from sklearn.preprocessing import MinMaxScaler
    scaler = MinMaxScaler()
    for column in ['number_project','average_montly_hours','time_spend_company','量化sales','量化salary']:
        column1='标准化'+column
        data[column1]=scaler.fit_transform(data[column])
    

    接下来进行,特征筛选
    特征筛选主要是剔除掉离散程度不高的变量。

    from sklearn.feature_selection import VarianceThreshold
    varianceThreshold=VarianceThreshold(threshold = 0.01)
    #这里因为我们已经进行了数据标准化,因此我们假设阈值为0.01
    varianceThreshold.fit_transform(newdata)
    

    通过特征筛选,我们发现所有特征满足我们的阈值要求。

    因为数据维度太大,因此,降维。我们直接降为二维。

    from sklearn.decomposition import PCA
    colors={
    0:'r',
    1:'b'
    }
    markers={
    0:'x',
    1:'D'
    }
    pca_2 = PCA(n_components=2)
    data_pca_2 = pca_2.fit_transform(newdata)
    

    从上图中,我们发现,似乎可以分为四类。

    接下来,聚类。

    from sklearn.cluster import KMeans
    kmModel = KMeans(n_clusters=4)
    kmModel = kmModel.fit(newdata)
    pTarget = kmModel.predict(newdata)
    plt.figure()
    plt.scatter(data_pca_2[:,0],data_pca_2[:,1],c=pTarget)
    dMean=pd.DataFrame(columns=newcolumns+['分类'])
    data_gb = newdata.groupby(pTarget)
    for g in data_gb.groups:
        rMean=data_gb.get_group(g).mean()
        rMean['分类']=g
        dMean=dMean.append(rMean,ignore_index=True)
        subData=data_gb.get_group(g)
    pd.crosstab(pTarget, pTarget)
    
    leftGroup=newdata.groupby(pTarget)['left'].agg({'left':np.sum})
    
    leftGroup['离职率']=leftGroup['left']/newdata['left'].size
    


    接下来看四类人的离职率



    可以看出,第一类和第二类在离职问题上,有共性,离职率为0,第三类人离职率为0.233,第四类人离职率为0.00507。这样看来,分为三类似乎就可以了。

    离职率最高一类员工的特征:

    featurescolumns=['satisfaction_level',
     'last_evaluation',
     'Work_accident',
     'promotion_last_5years',
     '标准化number_project',
     '标准化average_montly_hours',
     '标准化time_spend_company',
     '标准化量化sales',
     '标准化量化salary']
    from sklearn.linear_model import LinearRegression
    from sklearn.feature_selection import SelectFromModel
    IrModel = LinearRegression()
    SelectFromModel = SelectFromModel(IrModel)
    SelectFromModel.fit_transform(newdata[featurescolumns],newdata['left'])
    

    相关文章

      网友评论

          本文标题:聚类HW---python实现

          本文链接:https://www.haomeiwen.com/subject/zqzvbftx.html