В приведенном выше коде функция beta.select используется для создания (выбора) двух значений из входных данных априорной вероятности. У этих двух значений причудливые названия:
> beta.par
[1] 4.31 6.30
Вы занимаетесь только вашими суждениями и новыми данными. Значения альфа и бета работают в фоновом режиме, формируя бета-распределение по мере получения большего количества данных. А затем используется функция triplot, чтобы объединить новую информацию (3,7; 3 успеха и 7 неудач) с априорными суждениями и создать новое апостериорное суждение:
> triplot(beta.par, c(3,7))
Предположим, вы проводите 35 полных аудитов, и только пять облачных приложений удовлетворяют самым основным требованиям «глубокой эшелонированной защиты», предъявляемым к средствам контроля безопасности. Больше 200 приложений не подвергались аудиту. Теперь скорректируйте модель, добавив новые данные (рис. 10.3).
> triplot(beta.par, c(5,30))
Рис. 10.3. Трилинейная диаграмма Байеса, бета (4,31, 6,3) априорные данные, у = 5, н = 30
Вам все еще многое неизвестно о реальном состоянии средств обеспечения облачной безопасности компании, но, кажется, ситуация даже хуже, чем вы предполагали. Поэтому, чтобы было проще сделать выводы, вы решаете смоделировать большое количество результатов, основанных на новых суждениях (апостериорных). Это такой завуалированный способ сказать: «У меня нет времени проводить аудит всех приложений. Что если использовать известные мне данные в качестве вводных для симуляции?
Симуляция смоделирует 1000 аудитов и даст мне представление о том, какими могут быть будущие результаты аудита, учитывая уже известные данные». Кроме того, вы формулируете результат в виде 90 %-ного ДИ, что означает: «Я на 90 % уверен, что истинное значение действующих средств контроля безопасности компании XYZ находится между x% и y%». Давайте сначала получим 90 %-ный ДИ:
> beta.post.par <– beta.par + c(5, 30)
> qbeta(c(0.05, 0.95), beta.post.par[1], beta. post.par[2])
[1] 0.1148617 0.3082632
Все довольно просто: получаем значения альфа и бета из новых апостериорных данных и передаем их в простую функцию под названием qbeta. Первый параметр, c(0.05,0.95), просто обозначает наш 90 %-ный ДИ. Теперь смоделируем множественные тесты и получим 90 %-ный ДИ из них для более тщательной проверки.
> post.sample <– rbeta(1000, beta.post.par[1], beta.post.par[1], beta.post.par[2])
> quantile(post.sample, c(0.05, 0.95))
5% 95%
0.1178466 0.3027499
Похоже, интересующая нас доля, скорее всего (с уверенностью 90 %), окажется в диапазоне от 12 до 30 %. Можно пойти дальше и попытаться спрогнозировать, какие результаты будут получены в следующих 200 аудитах. Делается это так:
> num <– 200
> sample <– 0:num
> pred.probs <– pbetap(beta.post.par, num, sample)
> discint(cbind(sample, pred.probs), 0.90)
> [1] 0.9084958
> $set
[1] 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
[20] 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
[39] 55 56
Как видно из модели, можно быть на 91 % уверенными в том, что у следующих 200 аудитов будет от 17 до 56 успешных результатов. Теперь нужно построить финансовые модели для оценки стоимости устранения последствий и вероятности нарушения безопасности. Именно этот последний вопрос вызывает наибольшее беспокойство. Какой риск на самом деле вам перейдет? Какова вероятность того, что нарушение безопасности уже произошло или происходит сейчас?