Neural Survival Recommender — LSTM 기반 Just-In-Time 추천
Digest: 콘텐츠 추천 서비스의 사용자 유지(retention)에는 “사용자가 언제 다시 올지(return time)“와 “오면 무엇을 소비할지(item interest)“를 동시에 예측하는 능력이 핵심이지만, 기존 연구는 두 문제를 서로 다른 도구(survival analysis vs. matrix factorization)로 따로 풀었다(Context). 저자들은 두 문제 모두 시퀀셜 inter-session 의존성이 본질이라는 점을 통찰해, 단일 LSTM의 hidden state가 과거 세션 시퀀스를 압축하고 그 위에 (a) survival rate vector Λ_i와 (b) Poisson 아이템 rate vector â_i 두 개의 head를 얹어 하나의 신경망에서 multi-task로 학습하는 Neural Survival Recommender를 제안한다(Insight + Solution). 연속 적분 ∫λ(t)dt는 δt=1h 단위 piece-wise constant 근사로 finite sum화하고(UT=180일 → 4320-d 출력), hour-of-week 168-id embedding과 3-way factored unit으로 사용자 personalization을 결합한다(Solution). lastfm(1K users, 19M tuples)과 tianchi-mobile(10K users, 8917 categories) 두 실데이터에서 return time MAE는 lastfm 14.66h vs. Hawkes 15.64h / Poisson 17.12h, 추천 Recall@15는 lastfm 0.247 vs. HRM 0.213 / DPF 0.134로 모든 베이스라인을 일관 능가한다(Evidence, Tables 1·2·3). 다만 (a) 코드/시드/std 미공개, (b) δt와 UT 절단의 민감도 ablation 부재, (c) intra-session 시퀀스(곡 순서)는 미모델링이라는 한계가 남아(Limitations), 후속 연구로 intra-session 시퀀스 + 글로벌 시간 트렌드의 통합이 제안된다(Questions). 본 연구는 survival analysis가 deep network로 양도 가능함을 보인 초기 사례로, 이후 recurrent point process / time-aware recommender 흐름의 출발점이 되었다.
섹션별 요약
Abstract
본 논문은 사용자가 서비스로 언제 돌아올지와 돌아와서 무엇을 소비할지를 동시에 예측하는 Just-In-Time 추천 모델 Neural Survival Recommender를 제안한다. 핵심 아이디어는 LSTM의 hidden state로 사용자 세션 히스토리를 인코딩한 뒤, return time 예측에는 survival analysis의 rate-function 정식화를, 아이템 추천에는 exponential family(Poisson) 정식화를 적용해 multi-task로 결합학습하는 것이다. 두 개의 실세계 데이터셋(lastfm, tianchi-mobile)에서 multi-task 손실을 정확히 풀 수 있음을 보이고, HPF/DPF/HRM/Hawkes Process 등 strong baseline을 모두 능가함을 검증한다.
저자 contribution
- Survival analysis 문제를 neural network로 풀 수 있는 형태로 재정식화하고, 사용자 복귀 행동의 히스토리를 LSTM hidden state로 캡처할 것을 제안.
- Return time 예측과 item 추천을 하나의 아키텍처에서 joint learning으로 푸는 구조를 설계.
- 두 개의 실세계 데이터셋에서 SOTA 대비 우월성을 실험적으로 입증.
왜 이 연구를 하는가?
핵심 질문: 사용자가 언제 돌아올지와 돌아와서 무엇을 할지를 단일 모델에서 동시에 예측하면, 별개 모델로 푸는 것보다 더 좋은가?
| 기존 접근의 한계 |
|---|
| 1. 활동(when)과 흥미(what)를 별개 기술(survival analysis vs. matrix factorization)로 별도로 모델링 — 두 신호 간 상호 보완을 놓침 |
| 2. 기존 시간-aware 추천(Koren, 2009; Xiong, 2010)은 월/년 단위 coarse-grained 동역학에만 집중 → 분/시간 단위 inter-session 단기 의존성 미캡처 |
| 3. Session-based RNN(Tan et al., 2016)은 intra-session 다음 아이템만 예측. Inter-session 복귀와 추천을 동시에 다루지 않음 |
| 4. Hazard 기반 return-time 모델(Kapoor, 2014/2015)과 RMTPP(Du, 2016)는 단일 item 또는 단일 task 한정 — 다중 출력 joint training의 이점을 활용 못함 |
저자의 핵심 통찰: LSTM의 hidden state는 (a) 마지막 세션에서 얼마나 지났는지(gap), (b) 일·주 주기성(hour-of-week), (c) 직전 세션의 아이템 분포라는 세 가지 이질적 시간 신호를 모두 압축할 수 있고, 그 위에 두 개의 head(survival rate Λ, item Poisson rate â)를 올리면 하나의 backbone이 두 task에 동시에 도움이 되는 표현을 학습한다.
Introduction
논문은 “사용자가 언제 돌아올지(when)“와 “돌아와서 무엇을 할지(what)“를 동시에 예측하는 능력은 user retention/acquisition/supply forecasting 세 측면 모두에서 가치가 크다는 모티베이션으로 출발한다(§1.1). 같은 음악이라도 월요일 아침의 Skrillex vs. 금요일 밤의 Skrillex는 가치가 다르다는 예시로, 시점에 따른 흥미 변화가 단기 inter-session 동역학에 본질적으로 결합돼 있음을 강조한다. 데이터는 implicit feedback — Netflix류 explicit rating과 달리 음악 청취/이커머스 클릭처럼 반복적 짧은 세션이 자연스럽게 발생하는 도메인을 대상으로 한다(§1.2). §1.3에서는 사용자 u의 세션 데이터를 S_u = {(b_i, e_i, a_i)}(begin time, end time, action vector) 시퀀스로 정의하고, 다음 복귀 시각 b_{m_u+1} 또는 동등하게 gap g_{m_u+1} = b_{m_u+1} - e_{m_u} 추정을 목표로 설정한다. §1.4에서 survival analysis의 기본을 소개 — 생존함수 S(T)=Pr(t_survival ≥ T)가 rate function λ(t)로 dS/dT = -λ(T)S(T) 미분방정식을 만족하고, 그 해는 S(T) = exp(-∫_0^T λ(t)dt)라는 점, 그리고 t’ ≤ T에서 event가 발생하면 likelihood가 p(t') = λ(t')·exp(-∫_0^{t'} λ)로 주어진다는 점을 명시한다. 추천 맥락에서는 “death = 사용자 복귀”라는 해석을 채택한다.
Methods
High-level overview: Neural Survival Recommender는 (a) 사용자 입력 정보를 임베딩으로 압축, (b) LSTM으로 세션 시퀀스 시간 의존성 인코딩, (c) hidden state로부터 두 개의 출력 head(생존 rate 벡터 Λ, 아이템 Poisson rate â)를 동시 예측, (d) joint multi-task 손실로 학습하는 4단계 아키텍처다.
3.1 Survival 문제의 근사화
전체 시퀀스의 likelihood는 survival analysis 표준 form으로 다음과 같이 쓸 수 있다:
p(S_u | T, u) = ∏_i λ_u(b_i) · exp(-∑_i ∫_{e_{i-1}}^{b_i} λ_u(t)dt - ∫_{e_{m_u}}^T λ_u(t)dt)
부호를 뒤집어 negative log-likelihood를 모든 사용자에 대해 합하면:
L_sur(S,T) = ∑_u ∑_i [∫_{e_{i-1}}^{b_i} λ_u(t)dt - log λ_u(b_i)] + ∫_{e_{m_u}}^T λ_u(t)dt
비선형 λ_u(·)(예: 신경망 출력)에 대한 적분은 closed form이 없다. 저자는 piece-wise constant 근사를 도입한다: 시간을 δt 간격(논문 기본값 δt=1h)으로 양자화하고 각 bin 내에서 λ가 상수라고 가정하면 적분이 finite sum이 된다 — 즉 ∫_{e_{i-1}}^{b_i} λ ≈ ∑_{t=e_{i-1}}^{t≤b_i; +=δt} λ_u(t)·δt (Eq. 5–6). 절단 horizon UT=180일을 도입(180일 무복귀면 “lost user”로 간주); δt=1h일 때 출력 차원은 4320 — 언어 모델의 vocabulary 수만 단위에 비하면 modest. Gradient는 Algorithm 1의 단순 산술로 계산되며, 결과적으로 출력은 고정 길이 rate vector Λ_i = [λ_u(e_{i-1}), λ_u(e_{i-1}+δt), …, λ_u(e_{i-1}+UT)](Eq. 7)다.
3.2 Recurrent Survival Network (LSTM backbone)
§3.2.1에서 표준 LSTM 식(Eq. 8)을 채택한다 — input/forget/output gate, cell state c_t, hidden state h_t. vanishing gradient 회피가 long-range inter-session 의존성 모델링에 결정적이라고 명시.
§3.2.2 Survival head: 입력은 양자화된 gap id ind(g_j) = ⌈g_j/δt⌉로 변환 후 임베딩 행렬 G ∈ R^{N_G × d}로 lookup. LSTM을 통과한 hidden h_i를 받아
Λ_i = softrelu(W_{hλ}·h_i + b_λ) (Eq. 9, softrelu(x)=log(1+exp(x)) — rate 양수 보장)
저자는 이 형태가 Hawkes process의 신경망 일반화임을 명시한다. 고전적 Hawkes는 λ(t) = μ + α·∑_{t_i<t} exp(-β(t-t_i))(Eq. 10)로 과거 이벤트 영향을 고정된 지수 커널로 합산하지만, RNN은 학습 가능한 hidden state로 같은 효과를 더 풍부하게 표현한다.
§3.2.3 hour2vec: 시간 의미를 추가로 주입하기 위해 주 단위 168시간(Mon 00:00 ~ Sun 23:59)을 각각 id로 양자화하고, D ∈ R^{168 × d} 임베딩 행렬을 학습. “오전 1시에 떠난 뒤 6시간 안 돌아올 확률”과 “오후 8시에 떠난 뒤 6시간 안 돌아올 확률”이 다르다는 직관을 hour-of-week embedding이 자동 학습.
3.3 Recurrent Interests (Item head)
다음 세션의 action 벡터 a_i 예측에는 negative Poisson log-likelihood를 사용한다(Eq. 11):
L_rec(S,T) = -∑_u ∑_i ∑_v [a_i[v]·log(â_i[v]) - log a_i[v]! - â_i[v]]
softrelu로 â_i 양수성 보장. 입력 a_{i-1}은 sparse라서 직접 concat하면 학습이 잘 안 되므로 별도 hidden layer로 dense 변환(§3.3, Ngiam multimodal 영감) 후에 다른 신호와 합친다.
3.4 Personalization & 3-way Factored Unit
사용자 id u의 임베딩 U ∈ R^{|U| × d}를 추가 입력으로 concat:
x_i = [g_{i-1}; d_{i-1}; a_{i-1}; u] (Eq. 12)
여기에 더해 3-way factored multiplicative unit (Kiros, 2014의 영감)으로 user embedding과 hidden state의 gating interaction을 학습:
F_u = W_{fu}·u,F_h = W_{fh}·hâ = softrelu(W_rec·h + W_{fr}·(F_u ◦ F_h) + b_rec)(Eq. 15)Λ = softrelu(W_sur·h + W_{fs}·(F_u ◦ F_h) + b_sur)(Eq. 16)
(◦ = Hadamard product). 최종 손실은 두 task의 가중합:
min ∑_u (1-α)·L_sur(S_u, T) + α·L_rec(S_u, T) (Eq. 13, α=0.5 권장)
학습은 SGD. 차별점 요약: 기존 Hawkes/HMM 기반 return-time 모델은 단일 task 또는 단일 item 한정이었고, FPMC/HRM 등 next-basket RNN은 시간을 무시했다. NSR은 시간(gap+hour-of-week) + 아이템 두 신호를 동일 LSTM이 인코딩하고 두 출력을 multi-task 결합한 first joint formulation이다.
발견 (Findings)
- 추천 성능: lastfm에서 Recall@15 0.247(NSR) vs. 0.213(HRM, 2nd best), Prec@15 0.100 vs. 0.084로 상대 +15.9% Recall 개선 (Table 2). tianchi-mobile에서도 Recall@15 0.365 vs. 0.306으로 상대 +19.3% (Table 1).
- Return time 성능: lastfm MAE 14.66h(NSR) vs. 15.64h(Hawkes Process)로 절대 -0.98h 단축; tianchi-mobile에서는 7.53h vs. 8.26h(Hawkes)로 -0.73h 단축 (Table 3). Poisson process(17.12h, 17.12h가 lastfm/tianchi 동일하게 가장 약함)와 비교하면 더 큰 격차.
- Multi-task 효과: α∈[0,1] 트레이드오프 곡선에서 α=0.5 부근이 두 task 모두에서 단일-task(α=0 또는 α=1) 보다 우월한 영역이 존재(Fig. 6). 즉 두 task가 서로의 representation을 개선한다.
- 세션 수 효과: 한 사용자에 대해 관측된 학습 세션 수가 많을수록 Recall@15는 증가, MAE는 감소(Fig. 7) — recurrent 모델이 개인화 신호를 충분히 흡수하기 위해 최소 세션 수가 필요함을 시사.
- Gap 효과: 이전 gap g_{i-1}이 짧을수록 다음 세션 예측이 정확. 500시간(약 21일) 이상 떨어진 세션 쌍은 temporal 정보가 거의 무용해진다(Fig. 8).
Results
| Dataset | Metric | NSR (Ours) | HRM | DPF | HPF |
|---|---|---|---|---|---|
| tianchi-mobile | Prec@15 | 0.107 | 0.0925 | 0.0836 | 0.092 |
| tianchi-mobile | Recall@15 | 0.365 | 0.3064 | 0.2369 | 0.290 |
| tianchi-mobile | MRR | 0.167 | 0.1261 | 0.0825 | 0.110 |
| tianchi-mobile | MAR ↓ | 356.02 | 418.83 | 506.86 | 366.01 |
| lastfm | Prec@15 | 0.100 | 0.0840 | 0.0643 | 0.0612 |
| lastfm | Recall@15 | 0.247 | 0.2134 | 0.134 | 0.124 |
| lastfm | MRR | 0.113 | 0.0923 | 0.0562 | 0.044 |
| lastfm | MAR ↓ | 1077.01 | 1263.93 | 1753.90 | 1608.88 |
(Tables 1·2 in paper)
| Dataset | Metric (MAE↓, hours) | NSR (Ours) | Hawkes | LR-Huber | Poisson |
|---|---|---|---|---|---|
| tianchi-mobile | MAE | 7.53 | 8.26 | 8.37 | 8.99 |
| lastfm | MAE | 14.66 | 15.64 | 17.12 | 17.12 |
(Table 3)
추가 정성 분석: Fig. 9는 lastfm 6개 사용자 sample에 대해 모델이 예측한 생존함수 S(T) = exp(-∑_{t<T} λ(t)δt) 곡선과 실제 복귀 시각/MAE를 시각화 — 곡선이 0.5를 지나는 시점이 예측 중앙값.
Discussion
한계 (저자 인정 + 독자 식별)
- 저자 인정: 모델은 inter-session 의존성만 다룬다. intra-session 시퀀스(세션 내 곡 순서)는 미모델링 — 향후 confront 과제로 명시(§5).
- 저자 인정: 글로벌 시간 트렌드(특정 아티스트의 시기별 폭발적 인기)는 미통합 — local user dynamics만 학습.
- 독자 식별 — 평가 신뢰도: 모든 결과가 단일 실행/단일 split. seed variance·신뢰구간·통계적 유의성 검정 없음.
- 독자 식별 — 절단 민감도: UT=180일, δt=1h, 1시간 session gap 임계는 모두 single point estimate로 고정. 이 hyperparameter들이 결과에 얼마나 민감한지 ablation 없음.
- 독자 식별 — 코드 미공개: mxnet 사용 명시·architecture·하이퍼파라미터(LSTM 1 layer, hidden=300, lr=0.001, 50 epochs, embedding=300) 보고는 있으나 공식 코드/dataset split scripts 미공개.
- 독자 식별 — Top-K 평가 한정: 추천 메트릭이 Prec/Recall/MRR/MAR @15만 보고 — 다른 K나 NDCG, calibration 미포함.
향후 방향
- Intra-session 시퀀스 학습: 세션 내 곡 단위 순서를 모델링하면 “ranked list + sequence within session” 통합 가능 — 한계 1과 직접 연결.
- 글로벌 + local 동역학 통합: 글로벌 트렌드와 user-specific dynamics를 동시에 학습할 수 있는 hybrid 구조 — 한계 2 직접 연결.
이론적 의의
- Survival analysis의 deep learning 양도 가능성 실증: 연속 적분이 closed form 없는 비선형 λ(·)에 대해 piece-wise constant + 고정 차원 출력 벡터라는 단순 trick으로 SGD-trainable이 됨을 보인 초기 사례. 이후 neural temporal point process 흐름의 직접적 선행 연구.
- Multi-task가 표현 학습에 보태는 가치: when 과 what이라는 상호 보완적 시간 신호가 단일 backbone을 공유할 때 두 task 모두에서 단일-task 학습을 능가함을 α 스윕(Fig. 6)으로 실증.
- Hour-of-week embedding의 일반화 가능성: 주기적 시간 의미를 단순 168-id lookup으로 학습하는 패턴은 음악·이커머스 외 광고·뉴스·검색 로그에도 직접 이식 가능.
Discussion Points
- 논쟁점: piece-wise constant 근사가 생존함수의 tail(매우 큰 g)에서 얼마나 왜곡을 주는지는 미검토. Tail이 중요한 churn 분석 시 이 가정이 깨질 가능성. UT=180d 절단으로 long-tail 사용자는 구조적으로 missed.
- 검증 필요 가정: 1시간 session 정의가 데이터셋 dependent — 이커머스 vs. 음악에서 자연스러운 세션 길이가 다를 수 있고, 이 임계가 결과에 어떻게 영향을 주는지 확인 필요.
- 후속 연구: (1) intra-session sequence + inter-session survival의 hierarchical 결합, (2) cold-start user를 위한 meta-learning extension, (3) survival output을 직접 reranking objective에 noise-aware하게 결합하는 contextual bandit 변형.
실험 결과 상세
Experiment Detail Table
| Model/Method | Dataset | Metric | Score | vs. Baseline (next-best) |
|---|---|---|---|---|
| NSR (Ours) | tianchi-mobile | Prec@15 | 0.107 | +15.7% vs. HRM (0.0925) |
| NSR (Ours) | tianchi-mobile | Recall@15 | 0.365 | +19.1% vs. HRM (0.3064) |
| NSR (Ours) | tianchi-mobile | MRR | 0.167 | +32.4% vs. HRM (0.1261) |
| NSR (Ours) | tianchi-mobile | MAR ↓ | 356.02 | −2.7% vs. HPF (366.01) |
| HRM | tianchi-mobile | Recall@15 | 0.3064 | — |
| DPF | tianchi-mobile | Recall@15 | 0.2369 | — |
| HPF | tianchi-mobile | Recall@15 | 0.290 | — |
| NSR (Ours) | lastfm | Prec@15 | 0.100 | +19.0% vs. HRM (0.0840) |
| NSR (Ours) | lastfm | Recall@15 | 0.247 | +15.8% vs. HRM (0.2134) |
| NSR (Ours) | lastfm | MRR | 0.113 | +22.4% vs. HRM (0.0923) |
| NSR (Ours) | lastfm | MAR ↓ | 1077.01 | −14.8% vs. HRM (1263.93) |
| HRM | lastfm | Recall@15 | 0.2134 | — |
| DPF | lastfm | Recall@15 | 0.134 | — |
| HPF | lastfm | Recall@15 | 0.124 | — |
| NSR (Ours) | tianchi-mobile | MAE return-time (h) ↓ | 7.53 | −0.73h vs. Hawkes (8.26) |
| NSR (Ours) | lastfm | MAE return-time (h) ↓ | 14.66 | −0.98h vs. Hawkes (15.64) |
| Hawkes Process | lastfm | MAE | 15.64 | — |
| LR-Huber | lastfm | MAE | 17.12 | — |
| Poisson Process | lastfm | MAE | 17.12 | — |
Dataset 통계
| Dataset | Users | Items (target) | Train sessions | Test sessions | Split point T |
|---|---|---|---|---|---|
| lastfm | ~1,000 | 20,000 artists (top-popular) | 632,304 | 97,395 | 2009-01-01 |
| tianchi-mobile | 10,000 | 8,917 item categories | 289,399 | 122,119 | 2014-12-10 |
하이퍼파라미터 (보고된 값): LSTM 1-layer, hidden=300, embedding dim=300(모든 factorization baseline 동일), δt=1.0h, UT=180일, lr=0.001, 50 epoch, 프레임워크 = mxnet (Chen et al., 2015), α=0.5 (multi-task 가중치).
프레임워크 다이어그램
flowchart TB subgraph IN["입력 (Session i-1)"] G["g_(i-1): 이전 gap time (δt=1h 양자화)"] D["d_(i-1): hour-of-week (168 IDs)"] A["a_(i-1): action vector (클릭/listening)"] U["u: 사용자 ID embedding"] end EmbG["Embedding G ∈ R^(N_G × d)"] EmbD["Embedding D ∈ R^(168 × d)"] HiddenA["Dense hidden layer (sparse→dense)"] EmbU["Embedding U ∈ R^(|U| × d)"] G --> EmbG D --> EmbD A --> HiddenA U --> EmbU Concat["Concat: x_i = [g; d; a; u]"] EmbG --> Concat EmbD --> Concat HiddenA --> Concat EmbU --> Concat LSTM["LSTM cell (hidden=300, 1 layer)"] Concat --> LSTM LSTM -.->|"recurrent h"| LSTM Factor["3-way factored gate: F_u ◦ F_h"] LSTM --> Factor EmbU --> Factor OutLam["softrelu → Λ_i (survival rate vector, 4320-d for UT=180d)"] OutA["softrelu → â_i (Poisson item recommendation)"] Factor --> OutLam Factor --> OutA Loss["min (1-α)·L_sur + α·L_rec (α=0.5)"] OutLam --> Loss OutA --> Loss
재현성 및 신뢰도 평가
| 항목 | 등급 | 비고 |
|---|---|---|
| 코드 공개 | ❌ | 공식 GitHub 등 코드 저장소 미공개. mxnet 사용 명시만 있음 |
| 데이터 공개 | ⚠️ | lastfm 1K-users(공개), tianchi-mobile(Alibaba 공개 데이터셋) — 원본은 접근 가능하나 논문에서 사용한 정확한 split scripts 미제공 |
| 하이퍼파라미터 | ⚠️ | LSTM hidden(300), lr(0.001), epoch(50), embedding dim(300), δt(1h), UT(180d), α(0.5) 보고 — 탐색 범위·선택 근거는 미기재 |
| 실험 환경 | ❌ | GPU 사양·랜덤 시드·학습 시간 미보고 |
| 통계적 신뢰도 | ❌ | 단일 실행·평균만 보고. std·신뢰구간·유의성 검정 없음 |
| 종합 등급 | C | 코드/시드 미공개 + 단일 split → 정확 재현 어려움. 다만 데이터셋과 베이스라인 식별성은 양호해 유사 재현은 가능 |
주장별 신뢰도
| # | 주장 | 근거 | 신뢰도 |
|---|---|---|---|
| 1 | NSR이 모든 추천 메트릭에서 HPF/DPF/HRM을 일관 능가 | Tables 1·2, 두 데이터셋·4 메트릭 모두 1위 | 🟡 (단일 실행이라 effect size 검증 불가하지만 격차는 일관) |
| 2 | NSR이 return-time MAE에서 Hawkes/LR-Huber/Poisson 능가 | Table 3, 두 데이터셋 모두 1위 | 🟡 (격차 0.7~1.0h, 통계 검정 없음) |
| 3 | α=0.5 multi-task가 단일-task보다 우월 | Fig. 6, α-curve | 🟡 (시각적 확인, 수치 표 부재) |
| 4 | LSTM hidden state가 Hawkes 고정 커널 대비 더 풍부한 시간 의존성 표현 | §3.2.2 분석 + Table 3 MAE 격차 | 🟡 (논리적·실증적 지지, 직접 ablation 부재) |
| 5 | 500h 이상 떨어진 세션 쌍은 temporal 정보 무용 | Fig. 8 | 🟢 (그래프 직접 관찰 가능) |
읽기 난이도: ⭐⭐ (보통). LSTM·survival analysis 기본 지식이 있으면 method 이해는 직접적. 다만 piecewise approximation 식 전개와 3-way factored unit은 약간의 수학적 follow-through가 필요.
관련 연구 비교 매트릭스
선정 근거: NSR이 return-time prediction + item recommendation 두 task를 동시에 다루는 최초의 deep multi-task 접근이므로, 비교 대상은 (a) 같은 return-time prediction 문제를 다른 도구로 푼 Kapoor 2014/2015, (b) 같은 session-based recommendation 을 다룬 HRM 2015 / GRU4Rec(Tan 2016), (c) 같은 recurrent point process 패러다임의 RMTPP(Du 2016), (d) 기반 도구 Hawkes process를 직접 사용한 baseline을 골라 7-축으로 정렬했다.
| 축 | NSR (Jing & Smola, 2017) | Kapoor 2014 — Hazard return-time | Kapoor 2015 — sHMM Just-in-Time | HRM (Wang 2015) | RMTPP (Du 2016) |
|---|---|---|---|---|---|
| 핵심 접근 | LSTM hidden + piece-wise constant Λ + Poisson item head + 3-way factor (joint multi-task) | Cox hazard regression on per-item return time | Semi-hidden Markov Model로 boredom dynamics 추적 | Hierarchical representation pooling (CNN-like) | RNN으로 marked temporal point process 학습 |
| 문제 정의 | 사용자→서비스 복귀 + 다음 세션 아이템 joint 예측 | 사용자→단일 아이템 복귀 시각 예측 (단일 task) | “Just-In-Time” 복귀 권장 (Markov state) | next-basket item ranking (시간 무시) | 일반적 event sequence 시각+종류 예측 |
| 데이터 | lastfm 1K, tianchi-mobile 10K | KDD’14 Cup style implicit | proprietary activity stream | next-basket benchmarks | financial / electrical 이벤트 |
| 핵심 메트릭 | MAE 14.66h (lastfm), Recall@15 0.247 | MAE on item return (논문 보고) | Just-in-Time hit rate | Recall@K (next basket) | NLL of point process |
| 확장성 | LSTM step 당 O(|V|+UT/δt). UT=180d, δt=1h → 4320-d output. 1K~10K user 데이터셋에서 실증 | Hazard form은 단순하나 per-item → item 수 폭증 시 scaling 한계 | sHMM 상태 폭발 risk | next-basket pooling은 빠르나 시간 무시 | RNN 길이에 선형. multi-task 결합 비전 X |
| 한계 | (저자) intra-session 미모델, 글로벌 트렌드 미통합 / (독자) 단일 실행, code 미공개, UT 절단 민감도 미검증 | item-level 한정, 추천 task 통합 없음 | hidden state 폭증, 학습 비용 | 시간 정보 완전 누락 | 추천 task에 직접 적용 X |
| 코드 공개 | ❌ | ❌ | ❌ | ❌ (논문 한정) | ⚠️ (저자 일부 코드) |
원자적 인사이트 (Zettelkasten)
💡 비선형 hazard rate λ(t)는 piece-wise constant 근사로 SGD-trainable이 된다
출처: Neural Survival Recommender (Jing & Smola, 2017)
유형: 방법론적
연속 시간 survival analysis의 NLL은 ∫_a^b λ_u(t)dt 적분 때문에 비선형 λ(예: 신경망 출력)에 대해 closed form이 없다. NSR은 시간 축을 δt 간격으로 양자화하고 각 bin에서 λ가 상수라고 가정해 적분을 finite sum ∑_t λ_u(t)·δt(Eq. 5–6)로 바꾼다. 출력을 고정 길이 rate 벡터 Λ_i(NSR은 UT=180d, δt=1h → 4320-d, Eq. 7)로 정의하면 평범한 BP/SGD로 학습된다. 4320-d는 LM vocabulary 대비 작은 차원이라 실용적.
핵심 조건/맥락: 잘 작동하려면 (a) bin 폭 δt가 도메인 typical event interval보다 작아야 하고, (b) horizon UT 절단으로 long-tail 사용자가 구조적으로 missed 되는 trade-off를 감수해야 한다.
연결: Cox proportional hazards, Recurrent Marked Temporal Point Process — Du 2016, Hawkes process
활용 가능성: 의료 churn 예측, 광고 dwell time, 디바이스 신뢰성, 사이트 lifecycle 모델 등 연속 시간 + 비선형 hazard가 필요한 모든 도메인의 baseline trick.
💡 When/What 두 task의 multi-task 공유 backbone은 단일-task 학습을 모두 능가하는 영역이 존재
출처: Neural Survival Recommender (Jing & Smola, 2017)
유형: 실험적
NSR은 LSTM hidden state를 두 head(survival rate Λ와 Poisson rate â)가 공유하고 손실 (1-α)L_sur + α L_rec를 SGD로 최소화한다. α∈[0,1] 스윕(Fig. 6)에서 α≈0.5 부근이 두 task 모두 단일-task(α=0 또는 α=1)보다 우월한 sweet spot이 lastfm·tianchi-mobile 모두에 존재. 즉 “언제 돌아올지 신호가 무엇을 클릭할지 표현에 기여하고 그 역도 성립”한다.
핵심 조건/맥락: 두 task가 *동일한 시간 시퀀스(세션)*에서 온다는 점이 결정적. 다른 도메인의 task를 단순 결합한다고 자동 발생하지 않음.
연결: Multi-task learning bottleneck sharing, Caruana 1997 inductive bias transfer
활용 가능성: time-aware recommender에서 “click rate + click time”을 같은 backbone에서 multi-task로 학습하면 cold-start·long-tail 사용자 representation 강화 가능.
💡 RNN hidden state는 Hawkes의 고정 지수 커널을 학습 가능한 무한차원 커널로 일반화한다
출처: Neural Survival Recommender (Jing & Smola, 2017)
유형: 이론적 (연결)
Hawkes process는 λ(t) = μ + α·∑_{t_i<t} exp(-β(t-t_i))로 과거 이벤트가 고정된 지수 커널을 통해 현재 hazard를 가산적으로 자극한다고 가정한다. NSR의 LSTM hidden h_i는 같은 과거 정보를 학습 가능한 변환으로 압축해 Λ = softrelu(W·h)로 매핑한다 — 즉 커널의 형태 자체가 데이터에서 학습되며, gating·long-range 의존성·multimodal 입력을 자연스럽게 흡수한다(§3.2.2). 실증적으로 lastfm MAE 14.66h vs. Hawkes 15.64h로 격차 확인.
핵심 조건/맥락: hidden state가 충분히 길게 학습돼야 함. 500h 이상 떨어진 이벤트 쌍은 hidden state로도 회복 불가(Fig. 8) — 정보 자체가 사라지는 경우 RNN도 무력.
연결: Hawkes process self-exciting kernels, RMTPP — Du et al. KDD 2016, Neural ODE for hazard rates
활용 가능성: 점 프로세스 기반 churn/conversion/click 모델을 deep network로 업그레이드하려는 모든 시도의 출발점 frame.
💡 주기적 시간(예: hour-of-week)은 단순 168-id embedding lookup으로 잘 학습된다
출처: Neural Survival Recommender (Jing & Smola, 2017)
유형: 방법론적 (재사용 가능 trick)
월·일·시 등 주기적 시간을 sin/cos transform 대신 정수 id로 양자화 후 학습 가능한 embedding 행렬로 다루면, 비주기적 dent(공휴일, 주말 효과, 야간 dip)까지 자연스럽게 포착된다. NSR은 주 단위 168시간을 D ∈ R^{168×d}(§3.2.3)로 표현하고 hidden 입력에 concat. 같은 패턴이 day-of-year 365-id, time-of-day 24-id에도 직접 이식 가능.
핵심 조건/맥락: 데이터가 주기당 충분한 샘플을 가져야 each id가 의미 있는 update를 받음. 희소한 id(예: 5분 단위 1주 = 2016 ids)는 underfit risk.
연결: Time2Vec — Kazemi 2019, Fourier features 시간 인코딩
활용 가능성: 광고 클릭률·검색 시각·sleep 모델 등 모든 주기성 데이터에 첫 시도로 쓰기 좋은 baseline.
핵심 용어 정리
- Survival analysis: 시간 t까지 event(예: 사망, 사용자 복귀)가 일어나지 않을 확률
S(T)=Pr(t_survival≥T)를 모델링하는 통계 분야. 임상시험에서 출발. - Hazard rate / Intensity function λ(t): 단위 시간당 event 발생 순간 위험.
dS/dT = -λ(T)·S(T),S(T)=exp(-∫_0^T λ(t)dt). - Right-censoring: 관측 종료 시점 T까지 event가 일어나지 않은 경우의 부분 정보. NSR은 학습 종료 시각 T 이후 미관측 사용자에 적용.
- Piece-wise constant approximation (Eq. 5–6): 비선형 λ를 δt-간격 bin 내에서 상수라고 가정해 적분을 finite sum으로 바꾸는 기법. SGD-trainable화의 핵심.
- softrelu(x) = log(1+exp(x)): ReLU의 smooth 변형으로 항상 양수 출력 — survival rate와 Poisson rate 양수성 보장에 사용.
- LSTM (Long-Short Term Memory): input/forget/output gate + cell state로 vanishing gradient를 회피하는 RNN 변형(Hochreiter & Schmidhuber, 1997).
- Hawkes process: self-exciting 점 프로세스.
λ(t) = μ + ∑_{t_i<t} α·exp(-β(t-t_i))— 과거 이벤트가 현재 hazard를 자극. - Poisson factorization (HPF/DPF): implicit feedback의 count 데이터를 Poisson 분포로 모델링하는 factorization (Gopalan 2015, Charlin 2015).
- 3-way factored unit: 세 행렬 W_fu·W_fh·W_fr로 user embedding과 hidden state의 multiplicative interaction을 가벼운 cost로 학습(Kiros et al., 2014 영감).
- Just-In-Time recommendation: 언제 어떤 콘텐츠를 어떤 사용자에게 노출할지를 시점까지 함께 결정하는 추천 패러다임(Kapoor et al., 2015).
- Session: 두 이벤트 간격이 임계(NSR=1h) 이내인 연속 활동의 묶음. inter-session vs. intra-session 구분의 단위.
학습 노트 — Rate Function과 Cox 모형 (Q&A)
논문을 읽다가 생긴 헷갈림을 학부 저학년 눈높이로 풀어 정리한다.
Q1. Rate function λ(t)는 어떻게 “continuous”한가?
질문: 사람 데이터에서 x축을 나이라고 하면, 12살이더라도 1월과 12월의 hazard rate가 다를 수 있다. 그래서 λ(t)가 곡선으로 그려지는 게 맞나?
답: 정확하다. λ(t)는 시간에 대한 함수로 정의되며, 시간을 무한히 잘게 쪼개서 매 순간마다 위험도 값을 가질 수 있다. 수학적으로는
λ(t) = -d log S(t) / dt
이므로, 생존함수 S(t)가 매끄럽게 변하면 λ(t)도 매끄러운 곡선이 된다. “12살 1월”과 “12살 12월”이 다른 정도가 아니라, “12살 1월 1일 0시 0분 0초”와 “1초 뒤”도 이론적으로는 다른 값을 가질 수 있다.
핵심: rate function은 **“이론적·연속 함수”**다. 데이터를 어떤 주기로 수집했는지와는 별개로, 모델은 “시간이 흐르면서 매 순간 위험도가 어떤 값을 가질까?”라는 연속 곡선을 가정한다.
Q2. 그런데 실제 수집한 데이터는 1년·1시간 단위로 띄엄띄엄(discrete) 있는데, 어떻게 continuous 모델을 쓰나?
이게 핵심 통찰이다. 두 가지 전통이 공존한다.
-
Discrete-time survival 모형: 시간을 처음부터 이산 단위(연/월/일)로 두고, “올해 살아남을 확률 p₁, 내년에 살아남을 확률 p₂, …”처럼 이산 확률로 다룬다. 보험회사의 life table이 대표적.
-
Continuous-time survival 모형 (Cox·Hawkes·NSR 포함): 데이터가 띄엄띄엄 관측돼도, 내부적으로는 시간이 매끄럽게 흐르는 연속 모델을 가정한다. 그러면 likelihood에
∫ λ(t) dt같은 적분이 등장하고, 이걸 어떻게 계산할지가 모형마다 다른 trick이 된다.
NSR이 쓰는 piece-wise constant approximation은 두 세계를 잇는 다리다:
- 시간 축을 δt=1h 폭의 작은 칸으로 자르고, 각 칸 안에서는 λ가 일정하다고 가정한다.
- 그러면
∫_a^b λ(t) dt ≈ ∑_{각 칸} λ(t)·δt라는 finite sum이 되어 SGD로 학습 가능해진다. - δt를 0에 가깝게 줄이면 진짜 continuous에 다가가지만, 계산량이 폭발하니 실무에선 δt를 도메인 자연 단위(1h)로 고른다.
핵심: 모델이 그리는 곡선은 연속이지만, 학습할 땐 잘게 자른 막대 그래프(NSR의 경우 UT=180d, δt=1h → 4320-d rate vector Λ_i)로 근사한다. “이론은 continuous, 계산은 discrete”인 셈.
Q3. Cox 모형은 hazard rate를 “constant”로 가정하는 거 맞나? NSR은 그 가정을 푼 건가?
부분적으로 맞고, 중요한 오해가 하나 있다. Cox PH 모형이 진짜로 가정하는 게 무엇인지부터 정확히 짚자.
Cox proportional hazards 모형의 진짜 가정:
λ(t | x) = λ_0(t) · exp(β'x)
-
λ_0(t)는 baseline hazard로 시간에 따라 자유롭게 변한다. 즉 hazard rate 자체는 constant가 아니다. -
Cox가 가정하는 “constant”는 hazard rate가 아니라 hazard ratio다. 두 개체 A, B의 위험도 비
λ(t | x_A) / λ(t | x_B) = exp(β'(x_A - x_B))가 시간 t에 의존하지 않는다 — 이게 “proportional”의 의미.
| 양 | 시간에 따라 변하는가? |
|---|---|
Hazard rate λ(t | x) | ✅ 변한다 (baseline λ_0(t)를 통해) |
Hazard ratio λ(t | x_A) / λ(t | x_B) | ❌ 시간 무관 (Cox의 핵심 가정) |
공변량 효과 exp(β'x) | ❌ 시간 무관 |
따라서 “Cox는 HR을 time-independent하다고 가정한다”는 표현은 HR을 hazard ratio로 읽으면 정확하고, hazard rate로 읽으면 오해다.
NSR이 푸는 가정:
NSR은 Cox의 두 가지 한계를 동시에 해제한다.
-
Proportional 가정 해제: NSR은
λ_0(t) · exp(β'x)같은 곱 구조를 강제하지 않는다. LSTM hidden stateh_i에서 직접Λ_i = softrelu(W·h_i)로 hazard 곡선 전체를 신경망으로 그린다. 사용자별·시점별로 곡선의 모양이 자유롭게 달라질 수 있다. -
History-dependence 추가: Cox는 공변량 x가 (보통) 고정돼 있다고 본다. NSR은 과거 세션 시퀀스 전체가 LSTM hidden state에 압축돼 현재 hazard에 영향을 준다 — 이게 Hawkes process를 신경망으로 일반화한 부분이다(논문 §3.2.2).
한눈 비교:
| 모델 | Hazard 형태 | 시간 의존 | 공변량 효과 | 과거 이벤트 영향 |
|---|---|---|---|---|
| Cox PH | λ_0(t) · exp(β'x) | baseline만 | proportional (시간 무관) | ❌ 직접 모델링 X |
| Hawkes | μ + α·∑exp(-β(t-tᵢ)) | self-exciting | — | ✅ 고정 지수 커널 |
| NSR | softrelu(W · LSTM(history)) | 완전 자유 | 시간·공변량 결합 | ✅ LSTM이 학습 |
핵심: Cox의 “constant”는 hazard ratio가 시간 무관이라는 것이지, hazard rate가 일정하다는 게 아니다. NSR은 이 proportional 가정마저 풀고 hazard 곡선 전체를 신경망에 맡긴다. 대신 “어떤 공변량이 위험을 몇 % 올렸나” 같은 깔끔한 β 해석은 잃는다 — 표현력 ↑ vs. 해석성 ↓의 트레이드오프.
한 줄 요약
- λ(t)는 이론상 매 순간 정의되는 연속함수. 데이터가 띄엄띄엄이어도 모형은 continuous 가정을 유지할 수 있다.
- Continuous 가정과 discrete 데이터를 잇는 다리가 NSR의 piece-wise constant approximation(시간을 δt 칸으로 자르고 칸 안에선 λ가 상수).
- Cox의 “constant”는 hazard ratio가 시간 무관하다는 의미. hazard rate 자체는 baseline
λ_0(t)를 통해 시간에 따라 변한다. NSR은 이 proportional 가정마저 풀고 hazard 곡선 전체를 신경망으로 학습.
관련 연구
- Long Short-Term Memory — Hochreiter and Schmidhuber 1997
- Hierarchical Poisson Factorization — Gopalan Hofman Blei UAI 2015
- Dynamic Poisson Factorization — Charlin 2015
- Hierarchical Representation Model for Next-Basket Recommendation — Wang et al. SIGIR 2015
- Improved Recurrent Neural Networks for Session-based Recommendations — Tan Xu Liu 2016
- Recurrent Marked Temporal Point Processes — Du et al. KDD 2016
- A Hazard Based Approach to User Return Time Prediction — Kapoor et al. KDD 2014
- Just-in-Time Recommendation Boredom Dynamics — Kapoor et al. WSDM 2015
- Time-Sensitive Recommendation from Recurrent User Activities — Du Wang He Song NIPS 2015
- Dirichlet-Hawkes Processes — Du Farajtabar Ahmed Smola Song KDD 2015
- Factorizing Personalized Markov Chains for Next-Basket Recommendation — Rendle Freudenthaler Schmidt-Thieme WWW 2010
태그
paper recsys survival-analysis lstm multi-task-learning point-process temporal-recommendation wsdm-2017 implicit-feedback methodological
BibTeX
@inproceedings{jing2017,
author = {Jing, How and Smola, Alexander J.},
title = {Neural Survival Recommender},
booktitle = {Proceedings of the Tenth ACM International Conference on Web Search and Data Mining},
series = {WSDM '17},
year = {2017},
pages = {515--524},
publisher = {ACM},
address = {Cambridge, United Kingdom},
doi = {10.1145/3018661.3018719},
isbn = {978-1-4503-4675-7},
url = {https://dl.acm.org/doi/10.1145/3018661.3018719}
}