What I have:
- users are selling foobars on an auction site.
- each foobar is identical.
- price of foobar determined by user.
- i will be scrapping each price listing to form a data set that looks like:
$prices = (‘foobar’ => [12.34, 15.22, 14.18, 20.55, 9.50]);
What I need:
- to find a realistic average market price for each day, week, month.
Problems I face:
- Outlier rejection implimentations are not proving to work very well because the data is biased.
- It is extremely unlikely that a user will commit their auction to way below average market price becuase it can not be undone. Even if it is way below market price, this instance will happen so infrequently that the overall average will not be affected. However, users that will try to drive their prices up is much more likely and will happen frequently enough to affect the realistic average marketplace value.
What I think I’m going to do about it:
Daniel Collicott:
if I understand you correctly, you want to calculate the optimal
selling value of an item. (or are you trying to calculate the real
value??)Sellers are quite naturally gaming (e.g. ebay), trying to maximize
their profits.For this reason, I’d would avoid average/SD approaches: they are too
sensitive to outliers created by particular selling tactics.Game-theory-wise, I think clever sellers would estimate the highest
likely selling price (maximal profits) by researching their
competitors and their historical sales output: to find the sweet spot.For this reason I would record a histogram of historical prices over
all sellers and look at the distribution of prices, using something
approaching the mode to determine the optimal price i.e. the most
common sale price. Better still, I would weigh prices by the profit
(proportional to historical sales volume) of each individual seller.I suspect this would be nearer to your optimal market value; if you
are looking for the real market value then comment below or contact me
at my machine learning firm
Questions I have:
-
A more detailed explanation for the things refered to in @Daniel Collicott’s post:
–> optimal selling value
–> real selling value
–> algorithms for both
If all you want to do is normalise your dataset – i.e. to converge on a set that that reflects the mean then you could use the Kurtosis and Skewness to characterise the structure of your dataset to help identify outliers – (compute the metrics for each point using the rest of the dataset aim to minimise Kurtois and preserve the tendancy of the Skewness – reject extreme values and repeat until excluding a value doesn’t significantly change metrics).
But your problem is a bit more interesting:
Let me see if I’ve got this right: You have an imperfect understanding of the foobar market, but you have access to limited concrete information about it.
You want to use your limited dataset to predict hidden information about the market.
You need the Bayesian Average (see also Bayesian Inference).
Let’s assume you have 1000 prices per day;
For each day, compute: mean, mode, median, stdev, kurtosis and skewness – this gives a handle of the shape of the market:
stdev)
elastic, higher are more plastic – also relates to maturity
Comparing daily values will enable you to measure the health of the market.
Once you have a few weeks worth of trend data (it gets better over time) you can start testing for true prices.
If the true prices are jumping around then either the sample size is too small or the market isn’t functioning properly (i.e. some of the participants are paying above the value, selling below value, supply is restricted, purchase price isn’t related to value, etc).
I’ve had a go modelling used car prices (they’re not homogenous) but I did get some reasonable convergence – +/- 10% but that was on a limited dataset. It would also seem to work with house prices, not commodities or football scores.
It’s never going to give you a definitive predictive answer, especially not in an auction environment – but it should get you a lot closer to the true price than an arithmetic mean would.