포인트 프로세스로 이벤트 도착과 연쇄 반응 모델링하기
포인트 프로세스의 강도 함수, Poisson과 Hawkes 모델의 차이, 추정·검증·운영 시 주의점을 실무 관점에서 정리한다.
2026-08-14 · 최초 발행 2024-04-29
시간축 위의 이벤트는 단순히 많이 발생하는지보다, 언제 몰리고 이전 사건이 다음 사건에 어떤 영향을 주는지가 더 중요할 때가 많다. 포인트 프로세스는 금융, AIOps, 보안, 마케팅, 지진학처럼 고빈도 이벤트를 분석하고 예측할 때 이 구조를 다루는 모델군이다.
사건 도착을 강도 함수로 표현하는 방법
포인트 프로세스는 시간 (t∈[0, T])에서 사건이 발생한 시각의 집합을 확률적으로 나타낸다. 누적 발생 수 (N(t))와 조건부 강도 함수 (λ(t|H_t))가 기본 표현이다.
조건부 강도는 다음과 같이 정의한다.
(λ(t|H_t) = lim_{Δ→0} P{사건\ t\ 내\ 발생 | 과거\ H_t}/Δ)
이 값은 과거 이벤트 이력 (H_t)를 알고 있을 때, 다음 순간에 사건이 도착할 비율을 뜻한다. 모델 해석, 예측, 시뮬레이션은 모두 이 강도 함수를 중심으로 돌아간다.
독립적 이벤트 흐름에는 Poisson Point Process
동질 Poisson 프로세스는 강도가 (λ(t)=λ)인 경우다. 이벤트 간 간격은 지수 분포를 따르고, 사건은 서로 독립적이며 무기억성 특성을 가진다. 구조가 단순하고 해석하기 쉬워 기준선 모델로 쓰기 좋다.
비동질 Poisson 프로세스는 시간에 따라 (λ(t))가 달라진다. 계절성이나 트래픽 사이클을 반영할 수 있으며, 시뮬레이션과 추정에는 thinning(Ogata/Lewis–Shedler)을 적용한다.
사건이 후속 사건을 부를 때 Hawkes Process
Hawkes 프로세스는 자기흥분(Self-exciting) 구조를 사용한다.
(λ(t)=μ(t)+∑_{t_i<t} g(t−t_i))
이전 사건이 발생하면 이후 사건의 발생률이 일정 기간 높아진다는 뜻이다. 대표적인 커널은 (g(τ)=α e^{−βτ})다. 단일 변량에서는 안정성을 위해 (α/β<1) 조건이 필요하고, 다변량에서는 커널 적분 행렬의 스펙트럴 반지름<1이어야 한다.
분지 비율(branching ratio) (η=∫ g(τ)dτ)는 한 사건이 촉발하는 2차 전파 정도를 수치화한다.
강도 함수에 담기는 신호
베이스라인 (μ(t))에는 외생적 트렌드, 계절성, 캘린더 효과를 반영한다. piecewise-constant, splines, NN이 예가 된다. 내생 커널 (g(τ))는 지수 또는 파워 형태로 퇴화하며, 다변량 상호흥분 행렬을 포함할 수도 있다.
공변량 (x(t))까지 쓰면 (λ(t)=f(μ(t), g, x(t)·θ))로 확장할 수 있다. 로그-링크나 softplus를 통해 비음수 제약을 적용한다.
추정은 최대우도(MLE)를 주로 사용한다.
(log L = ∑ log λ(t_i) − ∫ λ(t) dt)
여기서 정규화항인 적분 계산이 핵심이다. L1/L2와 nuclear norm(다변량) 정규화는 해석성과 일반화를 높이는 데 사용한다.
운영 데이터에서 먼저 정리할 것
이벤트 로그는 모델에 넣기 전에 시간축부터 정돈해야 한다. 타임존, 서머타임, 클럭 오차를 보정하고 중복을 제거하며 검열(censoring) 구간을 명시한다. 집계 로그를 개별 이벤트로 복원해야 한다면 세션화와 히ュー리스틱이 필요할 수 있다.
강도 함수는 수치적으로 폭주하지 않게 설계한다. softplus로 비음수를 보장하고 clip으로 포화를 두며, 시간 단위는 초/분 가운데 하나로 일관되게 유지한다. Hawkes 모델은 (η<1) 여부를 검사하고, 비정상 구간은 piecewise 모델이나 레짐 전환으로 분리한다.
PPP는 (λ̂ = N/T) 형태의 폐형 추정이 가능하다. NHPP는 베이스라인 파라미터와 수치 적분이 필요하다. Hawkes는 Ogata 적분 또는 가속 적분, EM/Quasi-Newton을 쓸 수 있으며 미분 가능한 커널에는 자동미분을 활용할 수 있다.
적합도는 시간 리스케일링, 즉 시간변환 정리로 확인한다. 변환된 간격의 지수성·균등성을 KS, Q–Q로 검정하고, 잔차에서 버스트를 과대 또는 과소 적합하지 않았는지와 다변량 상호작용의 방향성을 점검한다.
이벤트 파이프라인과 예외 처리 위치
연쇄 구조가 도움이 되는 운영 장면
AIOps에서는 NHPP로 시간대별 기본 트래픽을 표현하고, Hawkes로 알람이 연쇄되는 반응을 모델링할 수 있다. 실시간 (λ(t))가 임계치를 넘으면 티켓 생성과 에스컬레이션을 연결한다.
고빈도 금융의 체결·주문 흐름에서는 다변량 Hawkes로 매수와 매도 이벤트의 상호흥분 구조를 추정한다. 분지 비율 상승은 유동성 고갈 경보와 연결할 수 있다.
보안 관제에서는 실패 로그인, 스캔, 익스플로잇으로 이어지는 흐름을 자기흥분 커널로 포착한다. (λ) 급등 또는 (η) 임계 초과를 블록·격리 정책의 트리거로 사용할 수 있다.
마케팅 푸시와 노티피케이션에서는 PPP 베이스라인에 캠페인 효과를 커널로 더해 과도한 노출을 줄인다. 예상 (λ) 상한을 기준으로 쿨다운을 적용한다.
지진·여진 분석에서는 ETAS(Hawkes 변형)를 이용해 여진율을 예측하고 재난 대응 인력 배치를 최적화한다.
모델 선택에서 드러나는 비용과 제약
| 항목 | Poisson (동질/비동질) | Hawkes |
|---|---|---|
| 성능 | 추정 단순, 폐형/저비용 적분 | 커널 적분 필요, MLE/EM 비용 상향 |
| 확장성 | 대량 스트림에 유리 | 다변량·고차원 시 상호작용 행렬이 병목 |
| 일관성 | 독립/무기억 가정 적합 영역에서 우수 | 연쇄·군집성 데이터에 적합, 과적합 주의 |
| 안정성 | 파라미터 안정 | 분지 비율<1 필요, 포화·clip 권장 |
| 운영 편의 | 해석성 최고, 기준선 모델 | 원인-결과 해석 가능, 튜닝 난이도 높음 |
독립적 흐름은 PPP로 시작하고, 군집이나 연쇄가 관측되면 Hawkes 또는 다변량 모델을 검토한다. 구현 단계에서는 (μ), (g), 공변량을 포함한 강도를 설계하고 (η<1) 제약을 둔다. 사다리꼴 또는 적분망을 사용해 수치 적분의 정확도와 속도 사이의 균형도 정해야 한다.
배포 후에는 시간 리스케일링 잔차로 적합도를 확인하고 drift를 감시한다. 온라인 스코어링은 알림 정책과 연결하고, 운영 결과가 다시 모델과 정책에 반영되는 피드백 루프를 만든다.
경보 리드타임 개선(+1030%p), 과잉 경보 감소(2040%), 버스트 기간 예측정확도 향상(F1 +515%p)을 기대할 수 있다. 용량 계획에서는 피크 트래픽 95퍼센타일 예측 MAPE 1020% 수준으로 오차를 축소하는 효과가 제시된다. 원인-결과 연쇄를 가시화하고 상호작용 구조의 설명 가능성을 높이며, 동적 임계와 자동화 의사결정 같은 실시간 적응형 운영도 구현하기 쉬워진다.
Python으로 시뮬레이션해 보기
전제조건: Python 3.10+, numpy 1.26+, 재현성 목적의 단순 구현.
import numpy as np
rng = np.random.default_rng(42)
def simulate_homogeneous_poisson(lam, T):
# 간격 지수분포 샘플링
t, events = 0.0, []
while True:
t += rng.exponential(1.0/lam)
if t > T: break
events.append(t)
return np.array(events)
def simulate_nhpp_thinning(lam_max, lam_t, T, dt=0.001):
# lam_t: callable λ(t), Ogata/Lewis-Shedler thinning
t, events = 0.0, []
while t < T:
t += rng.exponential(1.0/lam_max)
if t > T: break
if rng.uniform() < lam_t(t)/lam_max:
events.append(t)
return np.array(events)
def simulate_hawkes_ogata(mu, alpha, beta, T):
# λ(t) = μ + sum alpha*exp(-beta*(t - ti)), 안정성: alpha/beta < 1 권장
t, events, lambda_star = 0.0, [], mu
while True:
# 상계 강도
lambda_star = mu + (alpha*np.sum(np.exp(-beta*(t - np.array(events)))) if events else mu)
t += rng.exponential(1.0/lambda_star)
if t > T: break
# 현재 강도 계산
lam_t = mu + (alpha*np.sum(np.exp(-beta*(t - np.array(events)))) if events else mu)
if rng.uniform() < lam_t / lambda_star:
events.append(t)
return np.array(events)
# 사용 예
T = 10.0
pp = simulate_homogeneous_poisson(lam=5.0, T=T)
nhpp = simulate_nhpp_thinning(lam_max=10.0, lam_t=lambda t: 5 + 4*np.sin(2*np.pi*t/T), T=T)
hawkes = simulate_hawkes_ogata(mu=0.5, alpha=0.8, beta=2.0, T=T)
print("PPP 이벤트 수:", len(pp))
print("NHPP 이벤트 수:", len(nhpp))
print("Hawkes 이벤트 수:", len(hawkes))
# 간단 추정: PPP λ̂ = N/T
lam_hat = len(pp)/T
print("PPP λ̂:", round(lam_hat, 3))
시간 단위는 초/분 가운데 하나로 통일하고, lam_max는 lam_t의 상계를 충분히 크게 잡아야 한다. Hawkes에서는 (α/β<1)을 유지하며, 수치 포화를 막기 위해 커널 절단(예: (τ>5/β) 무시)을 고려한다.
시간 리스케일링 진단을 표준화하면 모델 변경 뒤에도 비교 가능성을 유지할 수 있다. 다변량 Hawkes는 희소 정규화를 통해 해석 가능한 상호작용 구조를 만들 수 있고, 실시간 시스템은 강도 상한과 백오프 로직으로 폭주를 막는다.
정확도와 비용, 해석성과 유연성, 정적 파라미터와 적응형 추정 사이에는 트레이드오프가 있다. 세밀한 커널과 풍부한 공변량은 적합도를 높일 수 있지만 추정·운영 비용도 높인다. 단순 PPP는 해석하기 쉽고, 자기흥분·비선형 모델은 성능이 우수하나 설명이 어려울 수 있다. 정적 파라미터는 안정적이지만 드리프트 환경에서는 온라인 추정이 필요하다.