Как справиться с большим разбросом целевой переменной при работе над проблемой многомерной регрессии?

Я работаю над проблемой регрессии, где у меня есть три переменных-предиктора как [count], [mean], [usage] и одна целевая переменная как Max_utilization. Мои данные выглядят примерно так:

df1

count   mean    usage   Max_utilzation
1      8515     5.305   23570
1      7906     5.985   5347
1      7819     5.245   121296
1      7646     14.735  19547
1      7852     10.255  569256
1      7852     10.255  569256
1      7852     9.52    7872
2      7033     18.675  8744
2      7030     6.72    185786
2      6998     12.1    94806.6
2      6987     14.535  4766
2      6971     12.145  281594
2      6960     7.405   140075
2      6963     4.83    13328

Как мы видим, для единственного значения count есть несколько Max_utilizationзначения присваиваются, и это тоже с очень большими вариациями. я сделалlog преобразование моих переменных-предикторов с использованием np.log10 а затем использовал RandomForestRegressor модель, чтобы соответствовать моим данным поезда.

Когда я проверял прогноз, я обнаружил, что мой прогноз неточный. Допустим, прогноз на моей записи в test данные выглядят так:

count  mean usage prediction
1      7200 4.9   9320

В приведенном выше сценарии моя модель предсказала значение как 9320 однако фактическое значение 7845.

Я предполагаю, что это предсказание связано с тем, что в моем столбце фрейма данных count, для одного значения есть несколько значений Max_utilization присвоено. Итак, моя модель предсказывает значение между min а также max диапазон целевой переменной. Если я ошибаюсь, поправьте меня.

Также есть способ решить эту проблему, чтобы получить более точные результаты.

Я также пробовал нормализовать целевую переменную и после предсказания попытался инвертировать целевую переменную, но у меня это не сработало.

Я также попытался взять среднее значение каждого столбца при единственном значении countНо и там у меня это не сработало.

df1['mean'] = np.log10(df1['mean'])
df1['usage'] = np.log10(df1['usage'])
df1['count'] = np.log10(df1['count'])
df1['Max_utilization'] = np.log10(df1['Max_utilization'])

X_TC01_v1 = df1.drop(['Max_utilization'],axis=1)
y_TC01_v1 = df1['Max_utilization']

"""split data into train and test"""
X_train_tc01_v1, X_test_tc01_v1, y_train_tc01_v1, y_test_tc01_v1 = train_test_split(X_TC01_v1, 
y_TC01_v1, test_size=0.1,random_state=111)

rf_model = RandomForestRegressor(n_estimators=20,criterion='mse',verbose=0)
rf_model.fit(X_train_tc01_v1, y_train_tc01_v1)

0 ответов

Другие вопросы по тегам