File size: 1,737 Bytes
f67b60a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import pandas as pd
import numpy as np


def encode_categorical_features(df: pd.DataFrame) -> pd.DataFrame:
    df = df.copy()

    df["genre"] = df["genre"].str.upper().map({"F": 0, "M": 1})
    df["heure_supplementaires"] = (
        df["heure_supplementaires"].str.capitalize().map({"Non": 0, "Oui": 1})
    )
    df["frequence_deplacement"] = (
        df["frequence_deplacement"].str.capitalize().map({
            "Aucun": 0,
            "Occasionnel": 1,
            "Frequent": 2
        })
    )

    return df


def features_engineering(df: pd.DataFrame) -> pd.DataFrame:
    df = df.copy()

    df['stabilite_management'] = df['annees_sous_responsable_actuel'] / (df['annees_dans_le_poste_actuel'] + 1)

    df['flag_surcharge_et_deplacement'] = (
            (df['heure_supplementaires'] == 1) & (df['frequence_deplacement'] == 2)
        ).astype(int)

    df['ratio_promotion_anciennete'] = (
        df['annees_depuis_la_derniere_promotion'] / (df['annees_dans_l_entreprise'] + 1)
    )

    sat_cols = [
        'satisfaction_employee_environnement',
        'satisfaction_employee_nature_travail',
        'satisfaction_employee_equipe',
        'satisfaction_employee_equilibre_pro_perso',
    ]
    df['satisfaction_globale']  = df[sat_cols].sum(axis=1)
    df['satisfaction_min']      = df[sat_cols].min(axis=1)

    df['log_revenu']           = np.log1p(df['revenu_mensuel'])

    return df



def remove_redundant_columns(df: pd.DataFrame) -> pd.DataFrame:
    df = df.copy()
    df = df.drop(columns=[
        'niveau_hierarchique_poste',
        'annees_sous_responsable_actuel',
        'annees_depuis_la_derniere_promotion',
        'departement',
        'revenu_mensuel'
    ], errors='ignore')

    return df