I have already asked a simmilar question, but i thoguth that this was not phrased well and hence i am trying a new post were i ask a better question. Let me know if this is ok. Judging by some of the questions i find on this side, i think this might be of general interest.
I want to estmiate future prices of a specific workwear Product that exists in various iterations for a long time already. This Product is manufactured by many different Companies. I have the following problems:
The historic data is not evently spaced at all. Due to the fact that price were not collected regularly.
Since a new change in the Price point refelcts a well-considered decision off lets say a Pricing Manager to set a price at this specific point in time, i do not want to simply resample the data.
The relative movement of the Prices refelects the fact that there is actual competition between theses Products and Prices have a relation
Some manufacturer base their Prices on fixed rules it seems (they want to be roughly x percent way from the marked leader).
But there are a lot of irregularites and weird spikes
I have tried classical time-series forecasting methods like ARIMA and SARIMA but this hasn't worked out very well. I also tried XGBoost (trend was substracted) but that was also not a very good approach.
Here is some mock data i have made up which should refelct what i mean:
data = [[46.973875522907306 0 Timestamp('2021-03-27 16:37:46.154145')]
[44.35252088802274 0 Timestamp('2022-12-27 18:21:30.328597')]
[68.21352717829075 1 Timestamp('2023-03-27 23:41:28.414013')]
[71.17857662522553 1 Timestamp('2024-05-26 14:02:55.713708')]
[73.63691230335472 1 Timestamp('2025-05-26 17:57:42.535576')]
[49.83693332959583 0 Timestamp('2025-07-28 19:03:14.018437')]
[41.907214364319955 2 Timestamp('2025-11-28 21:21:33.049803')]
[72.29112351512151 1 Timestamp('2026-03-27 14:29:14.677564')]
[42.5122040449943 2 Timestamp('2026-11-28 11:57:19.370834')]
[73.16654172146661 1 Timestamp('2026-11-26 06:41:38.587692')]
[40.10218751476946 2 Timestamp('2027-02-27 22:51:07.386227')]
[73.69381611275628 1 Timestamp('2027-02-25 12:26:30.725602')]
[43.75972091358219 2 Timestamp('2028-02-25 09:48:08.106932')]
[76.36436699738304 1 Timestamp('2028-03-28 21:13:44.591403')]
[78.52703760328819 1 Timestamp('2028-05-26 00:10:46.953340')]
[51.8892700693659 0 Timestamp('2028-09-26 22:38:52.944749')]
[45.425899965689375 0 Timestamp('2028-12-27 03:46:08.210155')]
[77.9199863343448 1 Timestamp('2029-02-25 04:48:42.741950')]
[73.99751031796518 1 Timestamp('2029-11-26 10:45:05.004740')]
[41.57406664391081 2 Timestamp('2029-11-28 06:31:03.377883')]
[47.25251952878873 0 Timestamp('2029-12-28 23:23:17.161067')]
[65.62167039557808 1 Timestamp('2030-02-25 01:08:21.705227')]
[43.896697654919784 2 Timestamp('2030-02-26 14:09:07.264185')]
[46.37889683671621 0 Timestamp('2030-11-27 17:08:13.271654')]
[49.08107903397994 0 Timestamp('2030-12-27 06:15:26.871337')]
[70.67978622818958 0 Timestamp('2031-04-29 15:12:30.338581')]
[46.782755985386395 2 Timestamp('2031-05-29 04:18:15.530916')]
[46.95734884550723 2 Timestamp('2031-08-27 20:31:57.981432')]
[64.64192432936557 0 Timestamp('2031-10-28 11:00:40.376479')]
[70.27867414577389 1 Timestamp('2031-11-28 01:11:17.440942')]
[46.24517460916999 0 Timestamp('2031-12-30 03:54:53.458656')]
[46.38294760484696 0 Timestamp('2032-05-26 15:30:17.290844')]
[48.69288430082989 0 Timestamp('2033-01-30 03:08:49.179457')]
[73.70014060044196 1 Timestamp('2033-05-28 22:10:20.736444')]
[47.098229970655424 0 Timestamp('2034-02-24 07:05:42.360137')]
[53.917296116962206 2 Timestamp('2035-08-29 23:17:14.261876')]
[47.06145863863456 0 Timestamp('2036-01-27 04:00:33.246190')]
[67.68805788357842 1 Timestamp('2036-02-26 18:19:42.329297')]
[52.96554572455424 0 Timestamp('2036-07-12 12:17:38.665539')]
[28.61486794761162 0 Timestamp('2036-08-28 17:49:22.089019')]
[54.03998534849586 0 Timestamp('2036-09-05 08:56:48.038756')]
[26.85426831085534 0 Timestamp('2036-10-17 20:34:22.194252')]
[72.16772600720459 1 Timestamp('2036-11-27 10:06:14.601262')]
[52.03611868020452 0 Timestamp('2037-01-31 03:40:47.105633')]
[58.13013601565125 2 Timestamp('2037-05-27 05:44:48.338077')]
[56.405229198398715 0 Timestamp('2037-09-13 20:46:33.570763')]
[77.21166201161871 1 Timestamp('2037-11-26 08:47:42.256874')]
[83.10182462721393 1 Timestamp('2038-11-27 12:11:12.207872')]
[56.41752906083321 0 Timestamp('2039-05-28 07:01:55.286433')]
[63.68417115856966 2 Timestamp('2039-07-30 14:09:40.098011')]
[86.7444660866586 1 Timestamp('2039-12-29 19:46:01.355680')]
[57.514698270308884 0 Timestamp('2040-04-02 21:56:44.179670')]
[71.03765512944545 2 Timestamp('2040-05-27 14:04:08.328799')]
[87.59541350193352 1 Timestamp('2041-01-26 18:37:35.449018')]
[57.50604733567312 0 Timestamp('2041-03-02 05:49:18.714669')]
[63.41229225782287 0 Timestamp('2042-01-27 20:39:03.812432')]
[83.13342093601007 2 Timestamp('2044-07-28 18:08:26.390386')]
[70.74682263511946 1 Timestamp('2044-10-26 02:26:55.200576')]]
df = pd.DataFrame({'Price': data[:, 0], 'ID': data[:, 1],'Timestamp': data[:, 2]})
This should look like this:
In princeple i could argue that the data is only irregular spaced since the price which were collected manualy have not been checked often enough. So I could assume that they are the same until the next price change happend and simply resample them.
df_ID1 = df.loc[shoe_Price['ID'] == 1]
df_ID1_resampled = df_ID1.set_index('Timestamp').resample('M').pad()
df_ID1_resampled.sort_index()
This looks slighty better for forecasting... but i am still really unsure what to try
As i said classical time-series forecasting methods i konw of have not worked so far. I tried to use XGBoost based on a Kaggle i found but it did not work any better.
Any pointer would be appreciated!