У меня проблема с реализацией формулы коэффициента прогнозирования Theil U в моем коде Python.Одна из проблем заключается в том, что я нашел несколько разных версий формулы.Вот три формулы, которые я хочу попробовать:
U1 и 2 Тейла из статьи, в которой по иронии судьбы обсуждается путаница с коэффициентом прогноза Тейла: https://journals.sagepub.com/na101/home/literatum/publisher/sage/journals/content/mrja/1973/mrja_10_4/002224377301000413/20181220/002224377301000413.fp.png_v03
Другая версиякоэффициент прогноза Тейла U на странице справки Oracle: https://docs.oracle.com/cd/E40248_01/epm.1112/cb_statistical/frameset.htm?ch07s02s03s04.html
Три формулы должны получить значение 1, если прогноз является просто наивным запаздывающим прогнозом.Итак, давайте рассмотрим следующий простой список: list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] и предположим, что прогноз для каждого значения - это предыдущее значение.
Это мой код для 3 формул:
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
num = (sum([(list[row] - list[row - 1]) ** 2 for row in [1, 2, 3, 4, 5, 6, 7, 8, 9]]) / 9) ** 0.5
denum = ((sum([list[row] ** 2 for row in [1, 2, 3, 4, 5, 6, 7, 8, 9]]) / 9) ** 0.5) + \
((sum([list[row - 1] ** 2 for row in [1, 2, 3, 4, 5, 6, 7, 8, 9]]) / 9) ** 0.5)
UI = num / denum
print(UI)
num = sum([(list[row - 1] - list[row]) ** 2 for row in [1, 2, 3, 4, 5, 6, 7, 8, 9]]) ** 0.5
denum = (sum([list[row] ** 2 for row in [1, 2, 3, 4, 5, 6, 7, 8, 9]])) ** 0.5
UII = num / denum
print(UII)
num = sum([((list[row - 1] - list[row]) / list[row - 1]) ** 2 for row in [1, 2, 3, 4, 5, 6, 7, 8, 9]]) ** 0.5
denum = sum([((list[row] - list[row - 1]) / list[row - 1]) ** 2 for row in [1, 2, 3, 4, 5, 6, 7, 8, 9]]) ** 0.5
U_Oracle = num / denum
print(U_Oracle)
Это 3 результата:
0.08224166442822099
0.15309310892394865
1.0
Я не могу понять, почему не все 3 значения равны 1. Что-то не так с моим кодом?