算法找出数据集中最真实的市场价格平均值

Dan*_*nze 9 php sorting algorithm

是)我有的:

  • 用户在拍卖网站上销售foobars.
  • 每个foobar是相同的.
  • foob​​ar的价格由用户决定.
  • 我将废除每个价格清单,形成一个如下数据集:
    $ price =('foobar'=> [12.34,15.22,14.18,20.55,9.50]);

我需要的:

  • 找到每天,每周,每月的实际平均市场价格.

我面临的问题:

  • 由于数据存在偏差,因此异常值拒绝实施并不能很好地发挥作用.
  • 用户极不可能通过低于平均市场价格的方式进行拍卖,因为它无法撤消.即使它低于市场价格,这种情况也很少发生,总体平均值不会受到影响.然而,试图提高价格的用户更有可能并且经常发生以影响实际的平均市场价值.

我想我会怎么做:

Daniel Collicott:
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,你想要计算一个项目的最佳销售价值.(或者你试图计算实际值?)

卖家很自然地玩游戏(例如ebay),试图最大化他们的利润.

出于这个原因,我会避免平均/ SD方法:它们对特定销售策略产生的异常值过于敏感.

从博弈论的角度来看,我认为聪明的卖家会通过研究他们的竞争对手及其历史销售额来估计最高的可能销售价格(最大利润):找到最佳点.

出于这个原因,我会记录所有卖家的历史价格直方图,并查看价格的分布,使用接近模式的东西来确定最优价格,即最常见的销售价格.更好的是,我会根据每个卖家的利润(与历史销量成比例)来衡量价格.

我怀疑这会更接近你的最佳市场价值; 如果您正在寻找真正的市场价值,请在下面评论或在我的机器学习公司与我联系

我有的问题:

  • 关于@Daniel Collicott帖子中提到的事情的更详细解释:

    - >最佳销售价值
    - >实际销售价值
    - >两者的算法

Ali*_*xel 7

使用平均值标准偏差,您的第一个问题非常简单:

$prices = array
(
    'bar' => array(12.34, 102.55),
    'foo' => array(12.34, 15.66, 102.55, 134.66),
    'foobar' => array(12.34, 15.22, 14.18, 20.55, 99.50, 15.88, 16.99, 102.55),
);

foreach ($prices as $item => $bids)
{
    $average = call_user_func_array('Average', $bids);
    $standardDeviation = call_user_func_array('standardDeviation', $bids);

    foreach ($bids as $key => $bid)
    {
        if (($bid < ($average - $standardDeviation)) || ($bid > ($average + $standardDeviation)))
        {
            unset($bids[$key]);
        }
    }

    $prices[$item] = $bids;
}

print_r($prices);
Run Code Online (Sandbox Code Playgroud)

基本上您只需要删除低于avg - stDev或高于的出价avg + stDev.


和实际的功能(从我的框架移植):

function Average()
{
    if (count($arguments = func_get_args()) > 0)
    {
        return array_sum($arguments) / count($arguments);
    }

    return 0;
}

function standardDeviation()
{
    if (count($arguments = func_get_args()) > 0)
    {
        $result = call_user_func_array('Average', $arguments);

        foreach ($arguments as $key => $value)
        {
            $arguments[$key] = pow($value - $result, 2);
        }

        return sqrt(call_user_func_array('Average', $arguments));
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出(演示):

Array
(
    [bar] => Array
        (
            [0] => 12.34
            [1] => 102.55
        )

    [foo] => Array
        (
            [1] => 15.66
            [2] => 102.55
        )

    [foobar] => Array
        (
            [0] => 12.34
            [1] => 15.22
            [2] => 14.18
            [3] => 20.55
            [5] => 15.88
            [6] => 16.99
        )
)
Run Code Online (Sandbox Code Playgroud)


web*_*bod 3

如果您想要做的只是标准化数据集 - 即收敛到反映平均值的集合,那么您可以使用峰偏度来表征数据集的结构以帮助识别异常值 - (使用以下方法计算每个点的度量数据集的其余部分旨在最小化 Kurtois 并保留偏度的趋势 - 拒绝极值并重复,直到排除某个值不会显着改变指标为止)。

但你的问题有点有趣:

让我看看我的说法是否正确:您对 foobar 市场的了解并不完善,但您可以获得有关它的有限具体信息。

您希望使用有限的数据集来预测有关市场的隐藏信息。

您需要贝叶斯平均值(另请参阅贝叶斯推理)。

假设您每天有 1000 个价格;

对于每一天,计算:均值、众数、中位数、标准差、峰度和偏度 - 这可以掌握市场的形状:

  • 平均值和中位数将显示价格的变动情况
  • 模式和标准差将显示市场的成熟程度(成熟市场应该具有较低的标准差)
  • 峰度将显示价格弹性 - 低值有弹性,较高值更具可塑性 - 也与成熟度有关
  • 偏度将显示需求趋势 - 向左的长尾表明抄底者,向右的尾表明愿意支付更高的价格

比较每日价值将使您能够衡量市场的健康状况。

一旦您获得了几周的趋势数据(随着时间的推移,情况会变得更好),您就可以开始测试真实价格。

  1. 首先,对数据集第一天的真实价格进行有根据的猜测。
  2. 使用偏斜加权价格样本计算市场的贝叶斯平均价格,但样本不超过每日集合的 80% / stddev^2
  3. 这现在成为您的真实价格。
  4. 每天重复 2 - 4 次应该会给您一个缓慢变化的价格。

如果真实价格在波动,那么要么样本量太小,要么市场运行不正常(即一些参与者支付的价格高于价值,销售低于价值,供应受到限制,购买价格与市场无关)值等)。

我尝试过对二手车价格进行建模(它们不是同质的),但我确实得到了一些合理的收敛 - +/- 10%,但这是在有限的数据集上进行的。它似乎也适用于房价,而不是商品或足球比分。

它永远不会给你一个明确的预测答案,尤其是在拍卖环境中 - 但它应该让你比算术平均值更接近真实价格。