Я реализовал код в PHP для линейной регрессии, идея состояла в том, чтобы взять дату доставки для каждого клиента (сколько бы дат доставки не было в БД), а затем использовать эти даты доставки (преобразованные в дни) в качестве уравнения линейной регрессии как параметр y, чтобы в конечном итоге предсказать будущую дату доставки / дату заказа, и на основе этого прогноза и сравнения с текущей датой система предпримет некоторые действия, такие как отправка push-уведомлений. Мой код для реализации выглядит следующим образом:
$conn = mysql_connect($dbhost,$dbuser,$dbpass) or die (mysql_error());
mysql_select_db($db, $conn) or die(mysql_error());//Outer Loop to save all eligable customer ID's
$idarray=array();
$firstloop=mysql_query("Select id FROM ordering GROUP BY id",$conn);
$number_of_rows_initial=mysql_num_rows($firstloop);
while (($row = mysql_fetch_array($firstloop, MYSQL_ASSOC)) !== false){
$idarray[] = $row; // add the row in to the results (data) array
// print_r($idarray);
}for($counter=0; $counter<$number_of_rows_initial; $counter++)
{
$id=$idarray[$counter]['id'];//First confirm if user is already registered via website
$result = mysql_query("SELECT TO_DAYS(date) FROM ordering WHERE id=$id",$conn);
$num_rows = mysql_num_rows($result);
// mysql_query($result,$conn) or die(mysql_error();
//echo $num_rows;$data = array();
$days=array();
$xAxis=array();
$ldate=array();
while (($row = mysql_fetch_array($result, MYSQL_ASSOC)) !== false){
$data[] = $row; // add the row in to the results (data) array
}
// print_r($data); // print result//This part is working now!!!!
for ($x = $num_rows-1 ; $x > 0; $x--) {
$days[$x] = $data[$x]['TO_DAYS(date)'] -$data[$x-1]['TO_DAYS(date)'];
$xAxis[$x]=$x;
}
$days[0]=30;
print_r("<br />",$days);
//print_r($xAxis);//my implementation of regression calculation
// calculate sums
$x_sum = (array_sum($xAxis));
$y_sum = array_sum($days);
echo "<br />","Customer ID is: ",$id,"<br />";
echo "Sum of X Axis: ",$x_sum, "<br />";
echo "Sum of Y Axis: ",$y_sum,"<br />" ;
$xx_sum = 0;
$xy_sum = 0;
for($i = 0; $i < $num_rows; $i++) {
$xy_sum+=($xAxis[$i]*$days[$i]);
$xx_sum+=($xAxis[$i]*$xAxis[$i]);
}
// calculate slope
$m = (($num_rows * $xy_sum) - ($x_sum * $y_sum)) / (($num_rows * $xx_sum) - ($x_sum * $x_sum));
// calculate intercept
$b = ($y_sum - ($m * $x_sum)) / $num_rows;
$predict=($m*($num_rows+1))+$b;
echo "The Slope of the Representative line is: ",$m,"<br />";
echo "The Y intercept is ",$b,"<br />";
echo "Predicted next date of delivery in days (from last delivery date) is: ", $predict,"<br />";//Final Date Calculation
$lastdate=mysql_query("SELECT TO_DAYS(date) FROM ordering WHERE id=$id",$conn);
$num_rows_date = mysql_num_rows($lastdate);
while (($row_date = mysql_fetch_array($lastdate, MYSQL_ASSOC)) !== false){
$ldate[] = $row_date; // add the row in to the results (data) array
}
echo "Total number of records for the given id are: ",$num_rows_date, "<br />";
$ldatefinal=$ldate[$num_rows_date-1]['TO_DAYS(date)'];
echo "Last date in the records for the given ID is ",$ldatefinal,"<br />";
echo "Last date + Prediction days = ",$ldatefinal+$predict,"<br />";$currentdate=mysql_query("SELECT TO_DAYS(CURDATE())",$conn);
$dcrow = mysql_fetch_assoc($currentdate);
//$dhold=$dcrow['TO_DAYS(CURDATE())'];
//echo "Current Date is: ",$dcrow['TO_DAYS(CURDATE())'],"<br /" ;
//UPON EXECUTION NOTHING BELOW GETS ExEcuted ??
//echo "Last date + Predicted days = ";if (( (($ldatefinal+$predict) - $dcrow['TO_DAYS(CURDATE())']) <3 )&& $predict>0){
echo "Time to Order<br />","</br />";
}else if((( (($ldatefinal+$predict) - $dcrow['TO_DAYS(CURDATE())']) >3 && $predict>0) )){
echo "You Got Gas!!<br />","</br />";
}else{
echo "Linear Regression not Suitable for this Record ID","<br />";
}
}
mysql_close($conn);
Кажется, что все работает идеально, за исключением случаев, когда предсказание приходит с отрицательными числами, на данный момент я решил игнорировать их, используя линейную регрессию «echo», не подходящую для этого идентификатора записи «,»
«;» но я уверен, что должен быть лучший способ приспособиться к этому типу сценариев, я просто не уверен, как в моем случае, особенно с использованием формата даты. Любая помощь будет принята с благодарностью. Я должен сказать, что этот форум и, конечно, его пользователи были чрезвычайно добры и щедры со своим прошлым временем и знаниями для меня, и надеюсь, что вы, ребята, сможете указать мне правильное направление и в этот раз. Hamood
Задача ещё не решена.
Других решений пока нет …