Я пытаюсь вменить пропущенные значения временного ряда 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)))
отсутствующее_значение_импутации (df, 'A', 8, rename_alcohol_columns)
Я получаю такой результат:
RMSE:
A 32.0
B 0.0
C 0.0
dtype: float64
Является ли этот подход правильным?