юли 242009
 

Преди 3 дни зададох на учтивите блогочитетели един статистически въпрос. Това, че получих отговори, при това то доста (като за моя блог), ме кара да се чувствам задължен да споделя решението, до което достигнах. Естествено, не мога да претендирам, че е перфектно (или окончателно). Но успях да се вслушам в препоръките и да измисля начин на извличане, при който:
– извличам данните за произволен период (в случая – 90 дни)
– от множеството премахвам всички наблюдения, чиито стойности са под 11% или над 89% (това има още да се доработва, в момента не се държи добре при много еднакви стойности)
– взимам медиана и средно отклонение, с които да правя сравнение на текущата стойност. Не съм намерил начин да взема лесно очакваната стойност (expected value), за това разчитам на медианата
– имам голям контрол върху периодите, за които извършвам наблюденията: примерно мога да премахна уикендите, наблюдавам само за опредени часове и т.н. (това го правя с pl/sql, иначе заявката става твърде брадата)

Както се досещате, смятам с такава заявка да следя определен процес в работата си. В момента тествам решението, за да уточня параметрите. Но за сега се получи нещо такова:

select sum(decode(period, 0, rec_cnt, 0)) Current_records,
       median(case
                 when rec_rank < 0.11 then
                  null
                 when rec_rank > 0.89 then
                  null
                 else
                  rec_cnt
               end) Records_median,
       stddev(case
                 when rec_rank < 0.11 then
                  null
                 when rec_rank > 0.89 then
                  null
                 else
                  rec_cnt
               end) Records_deviation,
  from (select percent_rank() over(order by rec_cnt) rec_rank, rec_cnt, period
           from (select get_sum_period_hrs(input_time) period, sum(people_count) rec_cnt
                    from input_stats
                   where input_time > sysdate - 90
                   group by get_sum_period_hrs(input_time))
          where period >= 0)

Това работи с таблица, в която имам статистика за наблюдаваните стойности, която се попълва на произволен кратък интервал (няколко минути). Ако използвам аналогията от предния пост, в таблицата имам колонка input_time (кога е направен текущия запис) и people_count (колко души са влезли след последния запис). Имам функция get_sum_period_hrs, която ми връща 0 за текущия период, >0 за предишен период на наблюдение и <0 за записи, които са извън желаните от мен периоди на наблюдение.

Не смятам това решение за съвършено или дори за добър пример, но се чувствам длъжен да споделя резултата след като получих толкова помощ от вас 🙂

 Posted by at 9:50

  2 Responses to “Въпрос на статистика: продължение”

  1. […] този резултат може да се прекара през заявката, която далновидно си записах миналата година, за да се вадят изводи дали, аджеба, сме на […]

  2. […] you can run the resulting number through the query, which I posted last year, to check if the current value is “normal” or […]

Sorry, the comment form is closed at this time.