More value heuristics
[contractdashboard.git] / heuristics / dateHeuristics.php
blob:a/heuristics/dateHeuristics.php -> blob:b/heuristics/dateHeuristics.php
<?php <?php
   
//long contract period (number of weeks/days?) //long contract period (number of weeks/days?)
$heuristics["DATE_LONG_CONTRACT_PERIOD"] = Array( $heuristics["DATE_LONG_CONTRACT_PERIOD"] = Array(
"description" => "long contract period (number of weeks/days?)" "description" => "long contract period (number of weeks/days?)"
); );
function DATE_LONG_CONTRACT_PERIOD($cn)  
{ function DATE_LONG_CONTRACT_PERIOD($cn) {
$averageContractPeriod = getAverageContractPeriod(); $averageContractPeriod = getAverageContractPeriod();
$stddevContractPeriod = getstddevContractPeriod(); $stddevContractPeriod = getstddevContractPeriod();
$diff = strtotime($cn['contractEnd']) - strtotime($cn['contractStart']); $diff = strtotime($cn['contractEnd']) - strtotime($cn['contractStart']);
$days = intval($diff / (60 * 60 * 24)); $days = intval($diff / (60 * 60 * 24));
$value = abs($days - $averageContractPeriod) / $stddevContractPeriod; $value = abs($days - $averageContractPeriod) / $stddevContractPeriod;
return Array( return Array(
"heuristic_value" => $value, "heuristic_value" => $value,
"raw_value" => $days, "raw_value" => $days,
"mean" => $averageContractPeriod, "mean" => $averageContractPeriod,
"stddev" => $stddevContractPeriod "stddev" => $stddevContractPeriod
); );
}  
$averageContractPeriod;  
function getAverageContractPeriod()  
{  
global $averageContractPeriod, $stddevContractPeriod;  
if (!$averageContractPeriod) {  
getStddevAverageContractPeriod();  
}  
return $averageContractPeriod;  
}  
$stddevContractPeriod;  
function getstddevContractPeriod()  
{  
global $averageContractPeriod, $stddevContractPeriod;  
if (!$stddevContractPeriod) {  
getStddevAverageContractPeriod();  
}  
return $stddevContractPeriod;  
}  
function getStddevAverageContractPeriod()  
{  
global $averageContractPeriod, $stddevContractPeriod;  
$query = "select AVG(dateDiff(contractEnd,contractStart)),stddev(dateDiff(contractEnd,contractStart)) from contractnotice";  
$result = mysql_query($query);  
$r = mysql_fetch_array($result, MYSQL_BOTH);  
$averageContractPeriod = $r[0];  
$stddevContractPeriod = $r[1];  
} }
   
  $averageContractPeriod;
   
  function getAverageContractPeriod() {
  global $averageContractPeriod, $stddevContractPeriod;
  if (!$averageContractPeriod) {
  getStddevAverageContractPeriod();
  }
  return $averageContractPeriod;
  }
   
  $stddevContractPeriod;
   
  function getstddevContractPeriod() {
  global $averageContractPeriod, $stddevContractPeriod;
  if (!$stddevContractPeriod) {
  getStddevAverageContractPeriod();
  }
  return $stddevContractPeriod;
  }
   
  function getStddevAverageContractPeriod() {
  global $averageContractPeriod, $stddevContractPeriod;
  $query = "select AVG(dateDiff(contractEnd,contractStart)),stddev(dateDiff(contractEnd,contractStart)) from contractnotice";
  $result = $conn->query($query);
  $r = $result->fetch(PDO::FETCH_BOTH);
  $averageContractPeriod = $r[0];
  $stddevContractPeriod = $r[1];
  }
   
//Reported late, 45 days? A late contract is a dodgy contract except maybe for variations? //Reported late, 45 days? A late contract is a dodgy contract except maybe for variations?
$heuristics["DATE_REPORTED_LATE"] = Array( $heuristics["DATE_REPORTED_LATE"] = Array(
"description" => "Reported late, 45 days?" "description" => "Reported late, 45 days?"
); );
function DATE_REPORTED_LATE($cn)  
{ function DATE_REPORTED_LATE($cn) {
$averageDaysLate = getAverageDaysLate(); $averageDaysLate = getAverageDaysLate();
$stddevDaysLate = getStddevDaysLate(); $stddevDaysLate = getStddevDaysLate();
$diff = strtotime($cn['publishDate']) - strtotime($cn['contractStart']); $diff = strtotime($cn['publishDate']) - strtotime($cn['contractStart']);
$days = intval($diff / (60 * 60 * 24)); $days = intval($diff / (60 * 60 * 24));
if ($days <= 0) { if ($days <= 0) {
$value = 0; $value = 0;
} } else {
else { // +1 demerit for exceeding 45 day requirement
// +1 demerit for exceeding 45 day requirement $value = (abs($days - $averageDaysLate) / $stddevDaysLate) + ($days < 45 ? 0 : 1);
$value = (abs($days - $averageDaysLate) / $stddevDaysLate) + ($days < 45 ? 0 : 1); }
} return Array(
return Array( "heuristic_value" => $value,
"heuristic_value" => $value, "raw_value" => $days,
"raw_value" => $days, "mean" => $averageDaysLate,
"mean" => $averageDaysLate, "stddev" => $stddevDaysLate
"stddev" => $stddevDaysLate );
);  
} }
   
$averageDaysLate; $averageDaysLate;
function getAverageDaysLate()  
{ function getAverageDaysLate() {
global $averageDaysLate; global $averageDaysLate;
if (!$averageDaysLate) { if (!$averageDaysLate) {
getDaysLate(); getDaysLate();
} }
return $averageDaysLate; return $averageDaysLate;
} }
   
$stddevDaysLate; $stddevDaysLate;
function getStddevDaysLate()  
{ function getStddevDaysLate() {
global $stddevDaysLate; global $stddevDaysLate;
if (!$stddevDaysLate) { if (!$stddevDaysLate) {
getDaysLate(); getDaysLate();
} }
return $stddevDaysLate; return $stddevDaysLate;
} }
   
function getDaysLate() { function getDaysLate() {
   
global $averageDaysLate,$stddevDaysLate;  
   
$query = "select AVG(dateDiff(publishDate,contractStart)), STDDEV(dateDiff(publishDate,contractStart)) from contractnotice";  
$result = mysql_query($query);  
$r = mysql_fetch_array($result, MYSQL_BOTH);  
$averageDaysLate = $r[0];  
$stddevDaysLate = $r[1];  
   
  global $averageDaysLate, $stddevDaysLate;
   
  $query = "select AVG(dateDiff(publishDate,contractStart)), STDDEV(dateDiff(publishDate,contractStart)) from contractnotice";
  $result = $conn->query($query);
  $r = $result->fetch(PDO::FETCH_BOTH);
  $averageDaysLate = $r[0];
  $stddevDaysLate = $r[1];
} }
   
?> ?>