Как мы можем найти лучший способ вменять пропущенные значения в pandas? - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь вменить отсутствующие значения временного ряда Dataframe, состоящего из 3 переменных. Количество строк представляет годы. Я делаю следующее с кодом:

  1. Проверьте одно из значений и вручную назначьте np.nan одному из значений, чтобы я мог проверить, насколько хорош вмененный результат, сравнивая его с фактическим значением. Значение с индексом 8 и столбцом A имело исходное значение как 594.

  2. Я использую iterativeImputer и обучаю его с кадром данных (с нулевыми значениями)

  3. Я использую тот же фрейм данных, что и тестовый фрейм данных, переименовываю столбцы и передаю его в модель.

  4. Сравнение вмененных значений и исходных значений и вычисление СКО.

  5. Исходя из того, какой метод дает мне наименьшее среднеквадратичное значение, я выбираю этот метод для расчета отсутствующих значений.

Правильно ли этот подход?

Ниже приведен кадр данных:

      A       B        C
0   2256.0  732.0   2749.0
1   1435.0  510.0   1662.0
2   939.0   365.0   1347.0
3   2637.0  984.0   2677.0
4   1697.0  572.0   2482.0
5   1301.0  459.0   448.0
6   979.0   250.0   1259.0
7   776.0   224.0   1049.0
8   594.0   193.0   851.0
9   NaN     NaN     NaN
10  NaN     NaN     NaN

Это код функции:

rename_colnames= { 0:'Due_to_Alcohol', 1:'Persons_Killed_due_to_alcohol', 2:'Persons_Injured_due_to_alcohol'}

def missing_value_imputation(df,column,position, rename_colnames):
    imputer_df = df.copy()
    imputer_df[column].loc[position]= np.nan
    imp = IterativeImputer(estimator = BayesianRidge(), max_iter=10, random_state=0)
    imp.fit(imputer_df)
    X_test = imputer_df
    br_imputer = np.round(imp.transform(X_test))
    br_imputer_df = pd.DataFrame(br_imputer).rename(columns= rename_colnames)
    print('RMSE:' + str(rmse(br_imputer_df,df)))

missing_value_imputation (df, 'A', 8 , rename_alcohol_columns)

Я получаю этот результат:

RMSE:
A    32.0
B    0.0
C    0.0
dtype: float64
...