2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Практическая польза от Теории Экстремальных Значений? EVT
Сообщение04.08.2025, 09:10 
Недавно потребовалось установить экспоненту Парето хвоста распределения вероятностей. И чтобы посмотреть насколько хорошо методы EVT работают, я сделал простой пример.

Пример: 30 сэмплов StudentT(df=4), каждый размером 20000. Определить экспоненту хвоста используя методы: Хилла, GPD, LeastSquares, CDF LogLog PLot.

Результаты ужасны, точность всех методов плюс минус километр. Я не вижу ни малейшего смысла в EVT поскольку вручную по линейке установить наклон линии на ЛогЛог Графике CDF оказывается не хуже (мне кажется даже лучше) чем специализированные методы EVT.

На графике - y - найденная экспонента хвоста, каждая линия это отдельный сэмпл, цвет метод определения, х - гиперпараметр (число точек в хвосте распределения которые использовались в расчетах). Верный результат это горизонтальная линия y=4, вместо этого мы наблюдаем, в зависимости от метода - систематические ошибки, либо дикий хаос. https://i.imgur.com/WGkCggx.jpeg

Даже, мне кажется с линейкой предпочтительней график лог лог https://i.imgur.com/O3JUUAz.jpeg, поскольку ты боль менее визуально и интуитивно понимаешь что делаешь. А когда ты ищешь на графике Хила "участок когда график стабилизировался" - ну и как его там найти (см картинку, черные линии https://i.imgur.com/SfXegbP.jpeg)? Выбирай любой кусок графика который нравится (отмечены желтым кружком), от экспоненты 3 до 4 - и на любом значении этого интервала график Хила выглядит "стабильный", выбирай любое значение которое нравится. И получается смысл тогда в этом методе Хила? Я и с линейкой на лог лог графике установлю что экспонента где то между 3 и 4, и при этом еще осмысленно будет видно что это значит, чем абстрактно выискывать некий стабильный участок на графике Хилла.

Ну а GPT (Peak over Treschold) - это MLE фиттинг хвоста, и это должен быть самый точный метод. А он дает наихудший результат из всех, https://i.imgur.com/298cqQp.png полный хаос, определяя экспоненту хвоста от 2 до 8, причем совершенно нестабильный и дико прыгает, малейшее изменение гиперпараметров и вместо 3х получаешь 6 - это как вообще?

Наилучший резултьат это MLE фиттинг полного распределения StudentT (красные линии). Но, это не в счет. Потому что здесь простой пример, где распределение симметрично, и мы точно знаем что это StudentT, это не будет также хорошо работать в реальности, если распределение перекошено например и имеет разные экспоненты левого и правого хвостов. Поэтому красные линии, они не считаются.

Я не понимаю какой смысл в EVT если она дает такие результаты? Получается лог лог график и линейка - проще, наглядне, надежней и даже точнее? И есть ли какой то лучше способ?

Код расчетов на Python и R https://quant.stackexchange.com/questio ... t-leastsqu

 
 
 
 Re: Практическая польза от Теории Экстремальных Значений? EVT
Сообщение07.08.2025, 13:26 
Отгадка, метод EVT GPD Peak Over Thresholds действительно не работает. Даже при сэмпле 100к StudentT(df=4) он в половине случаев не может точно определить экспоненту хвоста, у него системная ошибка, биас, MLE фиттинг систематически недооценивает хвост, и получается как на картинке (это лог лог CDF правого хвоста, >0.99 квантили). https://imgur.com/a/enrinVO

Фиттинг сделан верно, получилась некая "средняя" (точнее MLE) линия проходящая по всем точкам, и которая систематически недооценивает экспоненту.

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

P.S. Как это сделать автоматически - может выкинуть последние точки, как вариант - нужно итерационно делать фиттинг, и выкидывать последнюю точку до тех пор пока df растет, а как только он упал сразу остановиться. Или, попробовать другие эстиматоры кроме MLE

Код R

Код:
library(POT)
set.seed(1)

estimate_gpd_mle <- function(x, u) {
  coef_vec <- coef(fitgpd(x, threshold = u, est = "mle"))
  list(
    scale = as.numeric(coef_vec["scale"]),
    shape = as.numeric(coef_vec["shape"])
  )
}

estimate_gpd_mle_df <- function(x, u) {
  as.numeric(1 / estimate_gpd_mle_df(x, u))
}

x <- rt(100000, df = 4)
quantiles <- seq(0.95, 0.995, length.out = 50)
dfs <- sapply(quantiles, function(q) {
  u <- quantile(x, q)
  estimate_gpd_mle(x, u)
})


plot(quantiles, dfs, type = "b", pch = 19, col = "blue",
     xlab = "Quantile threshold (q)",
     ylab = "Estimated degrees of freedom (1/xi)",
     main = "Tail Index Estimation via GPD", log = "y", ylim = c(2, 8))
abline(h = 4, col = "red", lty = 2)  # true df
legend("topright", legend = "True df = 4", col = "red", lty = 2, bty = "n")


plot_tail_ll <- function(x, q, true_df, fit) {
  # Extract threshold
  u <- quantile(x, q)
 
  # Empirical tail
  tail_x <- x[x > u]
  tail_x_sorted <- sort(tail_x)
 
  n <- length(tail_x_sorted)
  ccdf <- rev(seq_along(tail_x_sorted)) / n
 
  # Plot empirical CCDF
  plot(tail_x_sorted, ccdf, log = "xy", type = "p", pch = 19, cex = 0.5,
       xlab = "x (log scale)",
       ylab = "P(X > x | X > u) (log scale)",
       main = paste("Log-Log Tail CCDF (q =", q, ")"))
 
  # Fitted GPD CCDF
  xi <- fit$shape
  sigma <- fit$scale
 
  x_grid <- seq(min(tail_x_sorted), max(tail_x_sorted), length.out = 200)
  excesses <- x_grid - u
  ccdf_gpd <- (1 + xi * excesses / sigma) ^ (-1 / xi)
 
  # Add fitted GPD line
  lines(x_grid, ccdf_gpd, col = "red", lwd = 2)
 
  # Add true Student-t tail
  ccdf_true <- 1 - pt(x_grid, df = true_df)
  lines(x_grid, ccdf_true / mean(x > u), col = "black", lty = 2, lwd = 1)  # conditional CCDF
 
  # Annotate
  legend("topright",
    legend = c(
      sprintf("GPD fit: df = %.4f, scale = %.4f", 1/xi, sigma),
      sprintf("True Student-t df = %d", true_df)
    ), col = c("red", "black"), lty = c(1, 2), bty = "n")
}


fit <- estimate_gpd_mle(x, quantile(x, 0.99))
plot_tail_ll(x, 0.995, 4, fit)

# x_trunc <- sort(x)[1:(length(x) - 5)]
# fit <- estimate_gpd_mle(x_trunc, quantile(x, 0.99))
# plot_tail_ll(x_trunc, 0.995, 4, fit)

 
 
 
 Re: Практическая польза от Теории Экстремальных Значений? EVT
Сообщение07.08.2025, 13:52 
Аватара пользователя
Brizon в сообщении #1696678 писал(а):
не может точно определить экспоненту хвоста

Что такое "экспонента хвоста" (распределения Стьюдента)?

 
 
 
 Re: Практическая польза от Теории Экстремальных Значений? EVT
Сообщение07.08.2025, 14:14 
Параметр "степень свободы", или графически - угол наклона линии, хвостовой части распределения studentt на log log графике.

 
 
 
 Re: Практическая польза от Теории Экстремальных Значений? EVT
Сообщение07.08.2025, 14:22 
Аватара пользователя
Какая связь "степени свободы" с "экспонентой"?

 
 
 
 Re: Практическая польза от Теории Экстремальных Значений? EVT
Сообщение07.08.2025, 16:26 
В асимптоте StudentT превращается в Парето Pr(X>x) ~ x^-df, при x -> inf

Наверно правильно назвать степень, экспонента звучит некорректно... Степень хвоста StudentT

 
 
 
 Re: Практическая польза от Теории Экстремальных Значений? EVT
Сообщение12.08.2025, 13:02 
Отгадка:

Если рассмотреть идеальный случай (код julia):

Код:
[1 / fit(GeneralizedPareto, rand(GeneralizedPareto(0, 1, 1/3), 500)).ξ for _ in 1:10]


получим

Код:
2.3747
3.4744
2.9658
2.3281
4.3979
2.7633
3.3022
4.7440
2.6349
2.9094


И это при а) идеальном совпадении структуры (форма кривой), б) гиперпараметров (трешхолда=0), и в) достаточно большого сэмпла 500 точек, что не всегда возможно при "изоляции" хвоста (x > u) на реальных данных, обычно трешхолд ~ 0.98-0.99 квантиль, соотв чтобы получить хвост 500 точек нужен сэмпл 25к.

И даже в таком идеальном случае, ошибки 2.4-4.7. Ну а когда эти условия не идеальные - ошибка больше, что мы и наблюдали на графиках в прошлых постах.

Непонятно - почему это не указывается на первой же странице в книгах по EVT, чтоб не тратить время впустую на POT GPD MLE подход и сразу переходить к другим.

Вывод — эстиматоры POT GPD MLE а также WM — совершенно не применимы на практике, и почему об этом не говориться на первой же странице книг и статей по EVT, чтоб не тратить на них время и сразу переходить к другим - непонятно (либо я все еще допускаю где то ошибку, но я ее не вижу...) Они сходятся «в асимптоте» — но на практике нету столько данных.

Что делать - использовать настроенные эстиматоры DEDH и HILL.

 
 
 
 Re: Практическая польза от Теории Экстремальных Значений? EVT
Сообщение17.08.2025, 15:12 
Итого, я использовал среднее xi=1/mean(1/DEDH, 1/HILL) и получился вполне нормальный результат. Итого, то что я хотел посчитать на исторических ценах акций (лог прибыль), дневных: степень левого хвоста распределения 3, правого 3.7.

Возникает второй вопрос - где взять SkewStudentT которая вместо обычной формы $SkewStudentT(\nu,\sigma,\mu,\lambda)$ (Hansen variant) позволяла бы разные степени для левого и правого $SkewStudentT(\nu,\sigma,\mu_l, \mu_r,\lambda)$

 
 
 
 Re: Практическая польза от Теории Экстремальных Значений? EVT
Сообщение25.08.2025, 13:14 
Исследование 1 определение степени тяжелых хвостов прибыли акций на исторических данных:

Видео https://www.youtube.com/watch?v=BzWMapIpdSE
И код расчетов на julia https://github.com/al6x/profit_hunting/tree/main/tail

Исследование 2: оценка точности различных методов Теории Экстримальных Значений,

И мой вариант метода оценки - комбинации DEDH+HILL, дающий намного выше точность.

Код расчетов на julia https://github.com/al6x/profit_hunting/ ... -estimator

Также, похожее исследование, возможно кому то будет интересно, сравнение точности методов EVT сделанное хорошо известным исследователем и одним из пионеров EVT Лоренсом де Хааном, с такими же результатами - что они дают огромные ошибки, и он предлагает свой вариант нового метода KS.

https://www.bankofcanada.ca/wp-content/ ... 019-28.pdf

 
 
 [ Сообщений: 9 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group