You are here

function _extract_daily_data in Acquia Lift Connector 7.2

Extracts daily stats from the reporting API into results that can be displayed.

2 calls to _extract_daily_data()
acquia_lift_report_audience in ./acquia_lift.admin.inc
Builds the audience-specific report.
acquia_lift_report_daily_conversions in ./acquia_lift.admin.inc
AJAX callback to return the daily conversion report.

File

./acquia_lift.admin.inc, line 1108
acquia_lift.admin.inc Provides functions needed for the admin UI.

Code

function _extract_daily_data($daily_data, $personalization_name) {
  $daily_results = array();
  $i = 0;
  $counts = $goals = $vals = array();
  foreach ($daily_data as $variation_results) {
    $variation = $variation_results['variation_id'];
    foreach ($variation_results['results'] as $stats) {
      $day = $stats['timestamp'];
      $results = $stats['result'];
      if (!isset($counts[$variation])) {
        $counts[$variation] = $goals[$variation] = $vals[$variation] = 0;
      }
      $counts[$variation] += $results['decision_count'];
      $goals[$variation] += $results['conversion_count'];
      $vals[$variation] += $results['conversion_value'];
      $rate = $counts[$variation] > 0 ? $goals[$variation] / $counts[$variation] : 0;
      $mean = $counts[$variation] > 0 ? $vals[$variation] / $counts[$variation] : 0;
      $goal_value = $goals[$variation] ? floor($vals[$variation] / $goals[$variation]) : 1;

      // Calculate confidence bounds for conversion rate.
      $sd = $counts[$variation] > 0 ? sqrt($rate * (1 - $rate) / $counts[$variation]) : 0;

      // We want a 90% confidence interval, which means we need the 95th
      // quantile, given the two tails of the distribution.
      module_load_include('inc', 'acquia_lift', 'includes/AcquiaLiftLearnReport');
      $quantile = AcquiaLiftLearnReport::$normal_quantiles[4];
      $upper = $goal_value * ($rate + $quantile * $sd);
      $lower = $goal_value * ($rate - $quantile * $sd);
      $daily_results[] = array(
        'option_id' => $variation,
        'option_label' => _get_variation_label($variation, $personalization_name),
        'goals' => $results['conversion_count'],
        'count' => $results['decision_count'],
        'date' => $day,
        'timestamp' => strtotime($day),
        'conversion' => _format_report_percentage($rate),
        'conversion_value' => _format_report_number($mean),
        'estimated_value' => _format_report_number($mean, TRUE, 4),
        'margin_error' => _format_report_number(($upper - $lower) / 2, TRUE, 4),
        'counter' => $i,
        'control' => $i === 0,
      );
    }
    $i++;
  }
  return $daily_results;
}