Какой алгоритм использовать для поиска лучшей вероятности среди множества событий?

Всём привет

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

Задача:
Искомая вероятность является вероятностью происшествия INCIDENT, которое либо наступает, либо нет. Кратко запишем это как INCIDENT->true и INCIDENT->false.
INCIDENT зависит от описанных ниже пар объект-событие и их комбинаций.

Имеется множество объектов A...Z с разными полями-событиями a....z. Причём некоторые события являются не простыми, а составными (включают в себя некоторые параметры) т.е. имеет место быть вложенность, но не более двух уровней. Чтобы было проще понять, структура данных для событий такая:

[
  {
    "Object A": {
      "event": "(event name) a",
      "event": "(event name) b",
      "event": "(event name) c",
    },
    "Object B": {
      "event": "(event name) a",
      "event": "(event name) b",
      "event": "(event name) c",
    },
    "Object С": [{
      "event": {
        "event name": "(event name) a",
        "param1": "(param) 1",
        "param2": "(param) 2",
      },
      "event": {
        "event name": "(event name) a",
        "param1": "(param) 123",
        "param2": "(param) 321",
      }
    }]
  }
]

Как видно, имеются объекты типа C, события которых являются составными (включают в себя некоторые параметры param1, param2 etc).

Имеется база данных происшествий, в которой указаны состояния этих происшествий (INCIDENT->true или INCIDENT->false) и предшествующие им объекты с их событиями.
Требуется найти такие комбинации событий (и их параметров, в случае с составными событиями), при которых наступление INCIDENT->true было чаще всего.


Пример:

1) Имеется 100 записей с такими данными: у объекта A сработало событие a (краткая запись: A->a), 33% INCIDENT являются true среди множества всех INCIDENT с такими же событиями, остальные 66% INCIDENT являются false.
[
  {
    "A": "a",
    "INCIDENT": true x33 (33%)
    "INCIDENT": false x66 (66%)
  }
]


Если же одновременно вместе с этим событием (A->a) срабатывало событие B->a, то количество INCIDENT->true стало больше и теперь равно 50% от общего числа.
[
  {
    "A": "a",
    "B": "a",
    "INCIDENT": true x50 (50%),
    "INCIDENT": false x50 (50%),
  }
]


2) Добавим составное событие (вложенность). Если к событиям A->a и B->a добавляется C->a с параметром (param1 = 1), то количество INCIDENT->true уменьшается и становится 10% от общего числа.
[
  {
    "A": "a",
    "B": "a",
    "C": {
      "event name": "a",
      "param1": 1
    },
    "INCIDENT": true x10 (10%)
    "INCIDENT": false x90 (90%)
  },
]


А если к A->a и B->a добавляется такое же событие C->a, но с другими параметрами (param1 = 123) и (param2 = 321), то количество INCIDENT->true увеличивается и становится 60%.
[
  {
    "A": "a",
    "B": "a",
    "C": {
      "event name": "a",
      "param1": 123,
      "param3": 321
    },
    "INCIDENT": true x60 (60%)
    "INCIDENT": false x40 (40%)
  },
]


Всем спасибо!
  • Вопрос задан
  • 160 просмотров
Решения вопроса 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Полиномные цепочки связанных событий.
Для объекта A (поля-события: a1-aN, параметры составных событий: aa1-zzN), суммарная вероятность (для true - отдельно, для false - отдельно):
a1*(aa1+...+aaN)+a2*(bb1+...+bbN)+...+aN*(zz1+...+zzN)
и так - для каждого объекта (по два выражения на объект).

Но лучше - использовать нейросеть.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы