I am creating a program to collect and analyze prices for goods and alert the user when the price decreases so that they can buy it on "sale." I know a little statistics (e.g. standard deviation) but am looking for the best way to determine if a price drop is significant compared to historical prices - i.e. if I should bother alerting the user to the price decrease.

Let's say, for example, that my program is collecting prices for books. It searches the web, say, on a daily or weekly basis for prices for the book (both used and new), and stores this data in a database. I can make a graph of the prices over time (both lowest price, mean price, etc.) and visually determine when the price drops a significant amount - this is easy for a person to do. But what is the best statistical algorithm to determine this?

I can think of a few cases in which a person would buy a product when the price drops:

  1. If the price drops below a certain static barrier. For example, if the customer determines that they would buy the product at < 15, then whenever the price dips below that amount they should be alerted to that. This scenario is based on the idea that the customer believes that the price will actually eventually get that low, at some point in the future.
  2. If the price drops a significant amount below the current price. This is more realistic in some scenarios. For example, if there is a rare and relatively expensive book (for example, it was printed by an academic publisher with only a few thousand copies, all in hardcover, which sold for 150 when new and there are only a few copies on the market) - the book may be available (used) at the current time for an average price of 85. The price may never drop to 15, because the supply is so low. However, it may drop to a significantly lower price (40 or 50), but the customer doesn't have a specific price where they will buy the book.
  3. If the price of the book drops very low. A book may go today for 20, but the customer may want to wait and see if a bookseller is going to put it on sale for 5-8, because they don't need this book right now - but it's on their "wish list."

I am interested in this second and third scenario. Essentially I want to be able to determine when an item is available for a price that is "notable." I will store all of the historic prices in a database, and can compare this week's prices with historic prices.

What are your suggestions for statistical analytic tools which can be used to study this type of data and make automated recommendations?

  • $\begingroup$ I've edited your post to remove the anova tag (which may not be the method of choice) and added an econometrics tag. $\endgroup$ – Michelle Jan 28 '12 at 22:29

Personally, for my wishlists with different companies, I'm interested in a percentage drop, particularly if it is large (e.g. 80% drop for software price). A couple of things spring to mind:

  1. I am interested in current pricing comparisons, for example if I get notified that a price has dropped 15% but competitors are selling it even cheaper, then I will buy from the competitor. So the analysis should take into account current pricing from competitors as well, particularly if this is easy to check using one of those online price comparison sites.
  2. A comparison with initial price is probably not the correct measure to use as items remain on the market over time. As items are on the market for longer, they tend to come down in price. How will you calculate the percentage change, especially if the customer has the item on their wishlist for a reasonable length of time? Will you update the baseline against which the price drop is measured?
  3. Some items are marked down dramatically just before a new edition is released (books, software). If that is the reason for the price decrease, you may wish to add some text to the customer notification that a new release is coming out.
  4. The pricing from suppliers can be incorrect, for example there has been discussion on some boards about ridiculously high pricing for books, such as $999 for an out-of-print but not particularly interesting technical book. Cost inputs like will interfere with your algorithm, so you'll need to run some type of outlier detection to exclude these values.
  5. You may wish to use different algorithms for rare versus common items. Getting market pricing for the former may be very difficult.

Update: if you have sales data, you may notice an upwards change in sales trend once price hits a certain level. This is another way you could do notifications, however I'm assuming you don't have sales information.

This could probably be answered by an econometrician, which I am not, as I think you're after some type of utility function.

  • $\begingroup$ Thanks for your feedback. This is significant because you can compare current prices against historic prices along different axes. For example, you can trace the lowest and average weekly prices over time and see when a new low price is significantly lower compared to that data set, and that set could be all time (or the past 30 days), or alternately you could just compare it to the lowest price for the previous day. But then if the price decreases slowly (eg. Every day a little less) then you will never see a big "significant" price decrease. $\endgroup$ – Jason Jan 28 '12 at 22:05
  • $\begingroup$ You'll also find good ideas in several threads on this site that talk about similar questions involving variability, "burstiness," and outliers. A search on "Dixon" will turn up a number of such threads, for example. $\endgroup$ – rolando2 Jan 28 '12 at 22:38

For your purpose, seeking to know whether a price change is notable relative to historical prices, the above are fine approaches. I concur with the prior poster that you should look at price changes. Another idea is to look at prices relative to a peer set of competitors, if that is easily determinable from the data ("this item is 33% cheaper than its peers!")

But from an econometrics perspective, "significance" as we learn it in college stats (i.e. based on sample standard deviation of past price change data) while okay as qualitative threshold for this application, fails pretty quickly with price time series data.

The problem is that while we might think prices are discrete observations of an underlying continuous process, they are actually discrete observations of a fundamentally discrete process, and have a very long-tail distribution (so not amenable to assumptions of normality).

An engaging book to read is "The (Mis)behavior of Markets" by Benoit Mandelbrot. The pioneer of fractal theory looked at financial data from a wide variety of fields, sparked by the observation that price changes fall outside the 3-sigma and even 10-sigma far far more often than you would expect from past price change data. A digest appeared as a main article in Scientific American

Net net, for method (2) in the original post, you can use historical standard deviations of price changes to set a threshold using the same formulae as significance tests, and even call it "significant" in marketing collateral, just put an asterisk explaining the methodology in a footnote, and don't count too much on its statistical rigor.

  • $\begingroup$ Nice. Along the lines of your 2nd-to-last paragraph I'd recommend Fooled by Randomness or The Black Swan by Nassim Nicholas Taleb. $\endgroup$ – rolando2 Jan 29 '12 at 16:38

Very interesting problem. It reminds me of the foreign exchange or stock market problem, where you buy something (euros for example), it goes up, and now you're in a dilemma, should you sell it and gain some profit, or should you wait and hope that it will go up even more. So I guess the question could be restated as that instead of looking for a significant drop, you should look for the cheapest price or the highest drop within a period of time.

I would be (a little) pissed, if some system recommends something to me to buy now, then after couple of days, the price drops more.

I'm not sure how you would solve such problem. I wonder if building a model of how books/products change prices over time would be feasible. - I imagine it won't be easy to build such model. It would be interesting to know if the model approach works though.


Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.