0
$\begingroup$

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 at all.

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:

enter image description here

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

enter image description here

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!

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.