Ejemplo n.º 1
0
def addEmployee():
    if not request.json or not 'name' in request.json:
        return jsonify({"result": False, "msg": "Failed to Add Employee!"})

    # Get Prediction for the Employee Turnover - Create Dataframe
    df = pd.DataFrame()
    print(request.json)

    df['Age'] = [request.json['age']]
    df['DistanceFromHome'] = [request.json['distFromHome']]
    df['Children'] = [request.json['children']]
    df['Num CompaniesWorked'] = [request.json['numCompaniesWorked']]
    df['Training '] = [request.json['trainingHours']]
    df['Years At Company'] = [request.json['yearsAtCompany']]
    df['Years In Current Role'] = [request.json['yearsInCurrentRole']]
    df['YearsSinceLastPromotion'] = [request.json['yearsSinceLastPromo']]
    df['YearsWithCurSupervisor'] = [request.json['yearsWithCurrSupervisor']]
    df['StandardHours'] = [request.json['standardHours']]

    if (request.json['department'] == '1'):
        df['Department_Cutting'] = [1]
        df['Department_Pressing'] = [0]
        df['Department_Sewing'] = [0]
    if (request.json['department'] == '2'):
        df['Department_Cutting'] = [0]
        df['Department_Pressing'] = [1]
        df['Department_Sewing'] = [0]
    if (request.json['department'] == '3'):
        df['Department_Cutting'] = [0]
        df['Department_Pressing'] = [0]
        df['Department_Sewing'] = [1]

    if (request.json['gender'] == '1'):
        df['Gender_Female'] = [1]
        df['Gender_Male'] = [0]
    if (request.json['gender'] == '2'):
        df['Gender_Female'] = [0]
        df['Gender_Male'] = [1]

    if (request.json['jobSatisfaction'] == '1'):
        df['Job_Satisfaction_1'] = [1]
        df['Job_Satisfaction_2'] = [0]
        df['Job_Satisfaction_3'] = [0]
        df['Job_Satisfaction_4'] = [0]
    if (request.json['jobSatisfaction'] == '2'):
        df['Job_Satisfaction_1'] = [0]
        df['Job_Satisfaction_2'] = [1]
        df['Job_Satisfaction_3'] = [0]
        df['Job_Satisfaction_4'] = [0]
    if (request.json['jobSatisfaction'] == '3'):
        df['Job_Satisfaction_1'] = [0]
        df['Job_Satisfaction_2'] = [0]
        df['Job_Satisfaction_3'] = [1]
        df['Job_Satisfaction_4'] = [0]
    if (request.json['jobSatisfaction'] == '4'):
        df['Job_Satisfaction_1'] = [0]
        df['Job_Satisfaction_2'] = [0]
        df['Job_Satisfaction_3'] = [0]
        df['Job_Satisfaction_4'] = [1]

    if (request.json['maritalStatus'] == '0'):
        df['Martial_Status_Single'] = [1]
        df['Martial_Status_Married'] = [0]
        df['Martial_Status_Divorced'] = [0]
    if (request.json['maritalStatus'] == '1'):
        df['Martial_Status_Single'] = [0]
        df['Martial_Status_Married'] = [1]
        df['Martial_Status_Divorced'] = [0]
    if (request.json['maritalStatus'] == '2'):
        df['Martial_Status_Single'] = [0]
        df['Martial_Status_Married'] = [0]
        df['Martial_Status_Divorced'] = [1]

    if (request.json['salary'] == '0'):
        df['Salary_Low'] = [1]
        df['Salary_Average'] = [0]
        df['Salary_High'] = [0]
    if (request.json['salary'] == '1'):
        df['Salary_Low'] = [0]
        df['Salary_Average'] = [1]
        df['Salary_High'] = [0]
    if (request.json['salary'] == '2'):
        df['Salary_Low'] = [0]
        df['Salary_Average'] = [0]
        df['Salary_High'] = [1]

    if (request.json['overtime'] == '0'):
        df['OverTime_No'] = [1]
        df['OverTime_Yes'] = [0]
    if (request.json['overtime'] == '1'):
        df['OverTime_No'] = [0]
        df['OverTime_Yes'] = [1]

    if (request.json['absenteeism'] == '0'):
        df['Absenteeism Rate_Low'] = [1]
        df['Absenteeism Rate_Medium'] = [0]
        df['Absenteeism Rate_High'] = [0]
    if (request.json['absenteeism'] == '1'):
        df['Absenteeism Rate_Low'] = [0]
        df['Absenteeism Rate_Medium'] = [1]
        df['Absenteeism Rate_High'] = [0]
    if (request.json['absenteeism'] == '2'):
        df['Absenteeism Rate_Low'] = [0]
        df['Absenteeism Rate_Medium'] = [0]
        df['Absenteeism Rate_High'] = [1]

    if (request.json['performanceRating'] == 'A'):
        df['PerformanceRating_A'] = [1]
        df['PerformanceRating_B'] = [0]
        df['PerformanceRating_C'] = [0]
        df['PerformanceRating_D'] = [0]
    if (request.json['performanceRating'] == 'B'):
        df['PerformanceRating_A'] = [0]
        df['PerformanceRating_B'] = [1]
        df['PerformanceRating_C'] = [0]
        df['PerformanceRating_D'] = [0]
    if (request.json['performanceRating'] == 'C'):
        df['PerformanceRating_A'] = [0]
        df['PerformanceRating_B'] = [0]
        df['PerformanceRating_C'] = [1]
        df['PerformanceRating_D'] = [0]
    if (request.json['performanceRating'] == 'D'):
        df['PerformanceRating_A'] = [0]
        df['PerformanceRating_B'] = [0]
        df['PerformanceRating_C'] = [0]
        df['PerformanceRating_D'] = [1]

    if (request.json['education'] == '1'):
        df['Education_1'] = [1]
        df['Education_2'] = [0]
        df['Education_3'] = [0]
        df['Education_4'] = [0]
    if (request.json['education'] == '2'):
        df['Education_1'] = [0]
        df['Education_2'] = [1]
        df['Education_3'] = [0]
        df['Education_4'] = [0]
    if (request.json['education'] == '3'):
        df['Education_1'] = [0]
        df['Education_2'] = [0]
        df['Education_3'] = [1]
        df['Education_4'] = [0]
    if (request.json['education'] == '4'):
        df['Education_1'] = [0]
        df['Education_2'] = [0]
        df['Education_3'] = [0]
        df['Education_4'] = [1]

    if (request.json['workLifeBalance'] == '1'):
        df['Work Life Balance_1'] = [1]
        df['Work Life Balance_2'] = [0]
        df['Work Life Balance_3'] = [0]
        df['Work Life Balance_4'] = [0]
    if (request.json['workLifeBalance'] == '2'):
        df['Work Life Balance_1'] = [0]
        df['Work Life Balance_2'] = [1]
        df['Work Life Balance_3'] = [0]
        df['Work Life Balance_4'] = [0]
    if (request.json['workLifeBalance'] == '3'):
        df['Work Life Balance_1'] = [0]
        df['Work Life Balance_2'] = [0]
        df['Work Life Balance_3'] = [1]
        df['Work Life Balance_4'] = [0]
    if (request.json['workLifeBalance'] == '4'):
        df['Work Life Balance_1'] = [0]
        df['Work Life Balance_2'] = [0]
        df['Work Life Balance_3'] = [0]
        df['Work Life Balance_4'] = [1]

    # Load the XGBoost Model
    param_dist = {
        'objective': 'binary:logistic',
        'n_estimators': 180,
        'eta': 0.1,
        'gamma': 0.05,
        'max_depth': 3
    }

    clf = xgb.XGBModel(**param_dist)
    clf.load_model(TURNOVER_MODEL)

    # Predict Turnover from the XGBoost Model
    prediction = clf.predict(df.to_numpy())
    print(prediction)

    # Get Turnover Drivers
    # explainer = lime.lime_tabular(df.to_numpy(), feature_names=df.columns, class_names=[0,1], kernel_width=3)

    # Load the SVR Model
    svr = pickle.load(open(TIMETILLTURNOVER_MODEL, 'rb'))

    # Predict Time Till Turnover
    timetillturnover = svr.predict(df.to_numpy())[0]

    employee = Employee(request.json['name'],
                        request.json['age'],
                        request.json['department'],
                        request.json['phone'],
                        request.json['email'],
                        request.json['address'],
                        request.json['distFromHome'],
                        request.json['education'],
                        request.json['gender'],
                        request.json['jobSatisfaction'],
                        request.json['maritalStatus'],
                        request.json['children'],
                        request.json['salary'],
                        request.json['numCompaniesWorked'],
                        request.json['overtime'],
                        request.json['performanceRating'],
                        request.json['standardHours'],
                        request.json['trainingHours'],
                        request.json['workLifeBalance'],
                        request.json['yearsAtCompany'],
                        request.json['yearsInCurrentRole'],
                        request.json['yearsSinceLastPromo'],
                        request.json['yearsWithCurrSupervisor'],
                        request.json['absenteeism'],
                        request.json['recruitmentDate'],
                        request.json['loggedInId'],
                        turnover=prediction[0],
                        timetillturnover=timetillturnover)

    result = Employee.addEmployee(employee, mysql)

    return jsonify({"result": True, "msg": "Successfully Added Employee!"})