Дан кадр данных, содержащий задержки по времени: как определить, к какому моменту произошла 90% задержек - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть набор наблюдений, которые измеряют временную задержку от начального события, например, прошедшее время с момента отправки электронного письма до его открытия.

Учитывая набор из 100 наблюдений, как я могу сказать, в какой момент времени произошло 90 процентов открытий? Я хочу сказать, что «90% открытий произошло в течение 4 часов после отправки».

Я могу сгенерировать гистограмму задержек, которая показывает, что большинство открытий происходит рано, но я не знаю, как получить кумулятивную меру для всех подсчетов в корзинах. (Я не очень хорошо объясняю себя, не победил статистика)

Таким образом, с этими образцами данных у меня есть 10 наблюдений с задержкой в ​​1 час, 5 с задержкой в ​​2 часа, 3 с задержкой в ​​3 часа и 2 с задержкой в ​​4 часа. Это означает, что 90% открытий произошло менее чем за 4 часа. Как определить 90% -ный предел для реального набора наблюдений?

Отредактировано с созданием более компактных выборочных данных и добавлено первое сокращение на графике кумулятивного процента. Хотелось бы получить лучшие решения.

library(tidyverse)
library(ggplot2)
all_delays <- tibble(delay = rep(1:4, c(10, 5, 3, 2)))
all_delays
#> # A tibble: 20 x 1
#>    delay
#>    <int>
#>  1     1
#>  2     1
#>  3     1
#>  4     1
#>  5     1
#>  6     1
#>  7     1
#>  8     1
#>  9     1
#> 10     1
#> 11     2
#> 12     2
#> 13     2
#> 14     2
#> 15     2
#> 16     3
#> 17     3
#> 18     3
#> 19     4
#> 20     4

# histogram of data
ggplot(all_delays) + aes(delay) + 
  geom_histogram() +
  scale_y_continuous(breaks = seq(0,10,1))
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.


# newbie incorrect way to get plot of cumulative percentage.
# would welcome better way to do this.
all_delays <- all_delays %>% mutate(cnt = 1) %>% 
  arrange(delay) %>%
  mutate(cs = cumsum(cnt))
ggplot(all_delays) + aes(cs/nrow(all_delays),delay) + 
  geom_line()  +
  scale_x_continuous(breaks = c(0,.25,.50,.75,.90,1), 
                     labels=c("0","25%","50%","75%","90%","100%")) +
  geom_vline(xintercept =.9) +
  xlab("Cumulative Percentage of opens") +
  ylab("hours since open")

Создано в 2019-04-27 пакетом Представить (v0.2.1)

Я предполагаю, что мои ожидаемые результаты - это что-то, что скажет "90% limit = 3", или что-то вроде кумулятивной кривой, которая будет начинаться с кратчайшей задержки открытия, а затем увеличиваться в значении, пока не будет достигнуто 100% с отметкой 90 %.

Спасибо за quantile() ответ!

Скорость открытия электронной почты, как правило, имеет длинный хвост, в течение которого не происходит никаких действий в течение дня или двух после отправки электронного письма, и очень длинный хвост, когда люди просматривают свои почтовые ящики через несколько недель или даже месяцев после отправки электронного письма.

1 Ответ

0 голосов
/ 28 апреля 2019

То, что вы описываете, называется квантиль . Код ниже удаляет все задержки выше 90-го процентиля; то есть оставшиеся задержки дают вам очки, на которые произошло 90% событий.

> all_delays %>% filter(delay <= quantile(delay, 0.9))
# A tibble: 18 x 1
   delay
   <dbl>
 1     1
 2     1
 3     1
 4     1
 5     1
 6     1
 7     1
 8     1
 9     1
10     1
11     2
12     2
13     2
14     2
15     2
16     3
17     3
18     3
...