预测数据趋势

时间:2015-07-29 14:15:55

标签: php trend

早上好,Stack。我试图找出一种预测数据趋势的方法。我想知道是否有更好的方法来做这件事。我可以研究一下内置的函数或库吗? / p>

以下是我所得到的:(http://3v4l.org/RGU3i

$PopulationOfTexas = array(
    1999 => 20.56, // in millions
    2000 => 21.56,
    2001 => 22.56,
    2002 => 23.56
);

//generate an array sohwing the difference in each year compared to the previous year
$differneces = array();
$lastyear = null;
foreach($PopulationOfTexas as $k=>$v){
    if(empty($lastyear)){$lastyear = $k; continue;}
    $differneces[$k] = $k - $lastyear;
    $lastyear = $k;

    //use this later
    $lastitem = array("year"=>$k, "data"=>$v);
}

//get the average difference per year
$count = 0;
$total = 0;
foreach($differneces as $k=>$v){
    $count++;
    $total += $v;
}

$average = number_format(($total/$count), 2);

//make a prediction
$predictions = array();
for($i=0;$i<5;$i++){
    $year = isset($year) ? $year+1 : $lastitem["year"]+1;
    $prediction = isset($prediction) ? $prediction+floatval($average) : $lastitem["data"]+floatval($average);
    $predictions[$year] = $prediction;
}

print_r($predictions);

1 个答案:

答案 0 :(得分:1)

该算法完全被破解,因为它正在计算数组键的平均增量(年份值,1999年,2000年等),而不是数组值(总体),因此结果始终为1.

如果您添加了更多变异,您可能会发现错误,这会掩盖您的样本数据总是增加1的事实。修复:

foreach($PopulationOfTexas as $k=>$v){
    if(empty($lastyear)){$lastyear = $v; continue;}
    $differneces[$k] = $v - $lastyear;
    $lastyear = $v;

    //use this later
    $lastitem = array("year"=>$k, "data"=>$v);
}

更一般地说,算法非常简单,因为它可以预测平缓的增加/减少。