Преобразование отклика перед моделированием

Обучение с учителем в R: регрессия

Nina Zumel and John Mount

Win-Vector, LLC

Логарифмическое преобразование денежных данных

  • Денежные значения: логнормальное распределение
  • Длинный хвост, широкий динамический диапазон (60–700 тыс.)
Обучение с учителем в R: регрессия

Логнормальные распределения

  • среднее > медианы (~50 тыс. против 39 тыс.)
  • Прогноз по среднему завышает типичные значения
Обучение с учителем в R: регрессия

Возврат к нормальному распределению

Для нормального распределения:

  • среднее = медиана (здесь: 4,53 и 4,59)
  • более разумный динамический диапазон (1,8 – 5,8)
Обучение с учителем в R: регрессия

Процедура

  1. Логарифмируем отклик и обучаем модель
     model <- lm(log(y) ~ x, data = train)
    
Обучение с учителем в R: регрессия

Процедура

  1. Логарифмируем отклик и обучаем модель
     model <- lm(log(y) ~ x, data = train)
    
  2. Получаем прогнозы в логарифмическом пространстве
     logpred <- predict(model, data = test)
    
Обучение с учителем в R: регрессия

Процедура

  1. Логарифмируем отклик и обучаем модель
     model <- lm(log(y) ~ x, data = train)
    
  2. Получаем прогнозы в логарифмическом пространстве
     logpred <- predict(model, data = test)
    
  3. Преобразуем прогнозы в пространство отклика
     pred <- exp(logpred)
    
Обучение с учителем в R: регрессия

Прогнозирование логарифмически преобразованного отклика: мультипликативная ошибка

$log(a) + log(b) = log(ab)$

$log(a) - log(b) = log(a/b)$

  • Мультипликативная ошибка: $pred/y$
  • Относительная ошибка: $(pred - y)/y = \frac{pred}{y} - 1$

Уменьшение мультипликативной ошибки снижает и относительную.

Обучение с учителем в R: регрессия

Среднеквадратичная относительная ошибка

СКО относительной ошибки = $\sqrt{ \overline{ (\frac{pred-y}{y})^2 }}$

  • Логарифмирование отклика уменьшает СКО относительной ошибки
  • Однако RMSE модели при этом часто возрастает
Обучение с учителем в R: регрессия

Пример: прямое моделирование дохода

modIncome <- lm(Income ~ AFQT + Educ, data = train)
  • AFQT: балл теста профпригодности за 25 лет до опроса
  • Educ: лет обучения на момент опроса
  • Income: доход на момент опроса
Обучение с учителем в R: регрессия

Качество модели

test %>% 
+     mutate(pred = predict(modIncome, newdata = test),
+            err = pred - Income) %>%
+     summarize(rmse = sqrt(mean(err^2)),
+               rms.relerr = sqrt(mean((err/Income)^2))) 
RMSE СКО относительной ошибки
36 819,39 3,295189
Обучение с учителем в R: регрессия

Модель log(Income)

modLogIncome <- lm(log(Income) ~ AFQT + Educ, data = train)
Обучение с учителем в R: регрессия

Качество модели

test %>% 
+     mutate(predlog = predict(modLogIncome, newdata = test), 
+            pred = exp(predlog), 
+            err = pred - Income) %>%
+     summarize(rmse = sqrt(mean(err^2)),
+               rms.relerr = sqrt(mean((err/Income)^2)))
RMSE СКО относительной ошибки
38 906,61 2,276865
Обучение с учителем в R: регрессия

Сравнение ошибок

Модель log(Income): меньшая СКО относительной ошибки, большая RMSE

Модель RMSE СКО относительной ошибки
По Income 36 819,39 3,295189
По log(Income) 38 906,61 2,276865
Обучение с учителем в R: регрессия

Давайте потренируемся!

Обучение с учителем в R: регрессия

Preparing Video For Download...