Я новичок во временных рядах.
Это набор данных, над которым я работаю:
Date Price Location
0 2012-01-01 1771.0 Marche
1 2012-01-01 1039.0 Calabria
2 2012-01-01 2193.0 Campania
3 2012-01-01 2015.0 Emilia-Romagna
4 2012-01-01 1483.0 Friuli-Venezia Giulia
... ... ... ...
2475 2022-04-01 1963.0 Lazio
2476 2022-04-01 1362.0 Friuli-Venezia Giulia
2477 2022-04-01 1674.0 Emilia-Romagna
2478 2022-04-01 1388.0 Marche
2479 2022-04-01 1103.0 Abruzzo
Я пытаюсь создать LSTM для прогнозирования цен, но я не знаю, как управлять категориальной функцией Место нахождения: нужно ли мне использовать однократное кодирование или групповое?
То, что я хочу предсказать, это цена, основанная на местоположении.
Как я могу этого добиться? Решение Python особенно ценится.
Заранее спасибо.
@SalvatoreDanieleBianco, а как насчет разделения? Я думаю, что я не могу использовать классический 70-30, верно?
У вас есть только один временной ряд? или больше? Как насчет длины? 2480?
Для каждого региона у меня есть месяцы с 2012 по настоящее время (исключая май), так что-то вроде: <br> 2020-01-01 - цена - Сицилия <br> 2020-02-01 - цена - Сицилия И так далее
Хорошо понял. В этом случае мой совет состоит в том, чтобы рассматривать цены разных регионов как разные характеристики, чтобы получить набор данных формы (T, 20)
, где T
— количество временных данных, а 20
— количество регионов. Для разделения на поезд-тест вы можете использовать 80-20, где тестовые 20% — это самая последняя часть временного ряда.
@SalvatoreDanieleBianco, ты можешь мне помочь? Судя по имени, ты тоже итальянец ;)
да, я тоже итальянец :D Предоставьте в тексте воспроизводимый пример (например, 15 временных точек всего для 5 регионов), и я буду рад вам помочь. Если вы предпочитаете, вы можете указать случайные цены.
Давайте продолжить обсуждение в чате.
Предположим, мой набор данных (df
) аналогичен вашему:
Date Price Location
0 2021-01-01 791.076890 Campania
1 2021-01-01 705.702464 Lombardia
2 2021-01-01 719.991382 Sicilia
3 2021-02-01 825.760917 Lombardia
4 2021-02-01 747.734309 Sicilia
... ... ... ...
31 2021-11-01 886.874348 Lombardia
32 2021-11-01 935.040583 Campania
33 2021-12-01 771.165378 Sicilia
34 2021-12-01 952.255227 Campania
35 2021-12-01 939.754515 Lombardia
В моем случае у меня есть запись Price
для 3 регионов (Кампания, Ломбардия, Сицилия) каждый месяц. Моя идея состоит в том, чтобы рассматривать разные регионы как разные функции, поэтому я бы преобразовал df
как:
df = df.set_index(["Date", "Location"]).Price.unstack()
Теперь мой набор данных выглядит так:
Location Campania Lombardia Sicilia
Date
2021-01-01 791.076890 705.702464 719.991382
2021-02-01 758.872755 825.760917 747.734309
2021-03-01 880.038005 803.165998 837.738419
... ... ... ...
2021-10-01 908.402345 805.081193 792.369610
2021-11-01 935.040583 886.874348 736.862025
2021-12-01 952.255227 939.754515 771.165378
Пожалуйста, после этого убедитесь, что нет значений NaN
(df.isna().sum()
).
Теперь вы можете передать эти данные в многофункциональную RNN (или LSTM), как это сделано в этот пример, или в многоканальную 1D-CNN (выбрав соответствующий размер ядра). Единственной проблемой в обоих случаях может быть небольшой размер набора данных, поэтому постарайтесь не перепараметрировать модель (например, уменьшить количество нейронов и слоев), иначе переобучение будет неизбежным. Об этом вы можете протестировать модель на последних 20% вашего временного ряда:
from sklearn.model_selection import train_test_split
df_train, df_test = train_test_split(df, shuffle=False, test_size=.2)
Последняя часть — построить соответствие (X, Y)
для контролируемого обучения, но это зависит от того, какую модель вы используете и какова ваша задача прогнозирования. Другой пример здесь.
Вы можете просто использовать OHE. Вы также можете использовать географические координаты региона, если считаете, что позиция актуальна в прогнозе.