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

DatasetMetricNSR (Ours)HRMDPFHPF
tianchi-mobilePrec@150.1070.09250.08360.092
tianchi-mobileRecall@150.3650.30640.23690.290
tianchi-mobileMRR0.1670.12610.08250.110
tianchi-mobileMAR ↓356.02418.83506.86366.01
lastfmPrec@150.1000.08400.06430.0612
lastfmRecall@150.2470.21340.1340.124
lastfmMRR0.1130.09230.05620.044
lastfmMAR ↓1077.011263.931753.901608.88

(Tables 1·2 in paper)

DatasetMetric (MAE↓, hours)NSR (Ours)HawkesLR-HuberPoisson
tianchi-mobileMAE7.538.268.378.99
lastfmMAE14.6615.6417.1217.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/MethodDatasetMetricScorevs. Baseline (next-best)
NSR (Ours)tianchi-mobilePrec@150.107+15.7% vs. HRM (0.0925)
NSR (Ours)tianchi-mobileRecall@150.365+19.1% vs. HRM (0.3064)
NSR (Ours)tianchi-mobileMRR0.167+32.4% vs. HRM (0.1261)
NSR (Ours)tianchi-mobileMAR ↓356.02−2.7% vs. HPF (366.01)
HRMtianchi-mobileRecall@150.3064
DPFtianchi-mobileRecall@150.2369
HPFtianchi-mobileRecall@150.290
NSR (Ours)lastfmPrec@150.100+19.0% vs. HRM (0.0840)
NSR (Ours)lastfmRecall@150.247+15.8% vs. HRM (0.2134)
NSR (Ours)lastfmMRR0.113+22.4% vs. HRM (0.0923)
NSR (Ours)lastfmMAR ↓1077.01−14.8% vs. HRM (1263.93)
HRMlastfmRecall@150.2134
DPFlastfmRecall@150.134
HPFlastfmRecall@150.124
NSR (Ours)tianchi-mobileMAE return-time (h) ↓7.53−0.73h vs. Hawkes (8.26)
NSR (Ours)lastfmMAE return-time (h) ↓14.66−0.98h vs. Hawkes (15.64)
Hawkes ProcesslastfmMAE15.64
LR-HuberlastfmMAE17.12
Poisson ProcesslastfmMAE17.12

Dataset 통계

DatasetUsersItems (target)Train sessionsTest sessionsSplit point T
lastfm~1,00020,000 artists (top-popular)632,30497,3952009-01-01
tianchi-mobile10,0008,917 item categories289,399122,1192014-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 → 정확 재현 어려움. 다만 데이터셋과 베이스라인 식별성은 양호해 유사 재현은 가능

주장별 신뢰도

#주장근거신뢰도
1NSR이 모든 추천 메트릭에서 HPF/DPF/HRM을 일관 능가Tables 1·2, 두 데이터셋·4 메트릭 모두 1위🟡 (단일 실행이라 effect size 검증 불가하지만 격차는 일관)
2NSR이 return-time MAE에서 Hawkes/LR-Huber/Poisson 능가Table 3, 두 데이터셋 모두 1위🟡 (격차 0.7~1.0h, 통계 검정 없음)
3α=0.5 multi-task가 단일-task보다 우월Fig. 6, α-curve🟡 (시각적 확인, 수치 표 부재)
4LSTM hidden state가 Hawkes 고정 커널 대비 더 풍부한 시간 의존성 표현§3.2.2 분석 + Table 3 MAE 격차🟡 (논리적·실증적 지지, 직접 ablation 부재)
5500h 이상 떨어진 세션 쌍은 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-timeKapoor 2015 — sHMM Just-in-TimeHRM (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 timeSemi-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 10KKDD’14 Cup style implicitproprietary activity streamnext-basket benchmarksfinancial / electrical 이벤트
핵심 메트릭MAE 14.66h (lastfm), Recall@15 0.247MAE on item return (논문 보고)Just-in-Time hit rateRecall@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 상태 폭발 risknext-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 모델을 쓰나?

이게 핵심 통찰이다. 두 가지 전통이 공존한다.

  1. Discrete-time survival 모형: 시간을 처음부터 이산 단위(연/월/일)로 두고, “올해 살아남을 확률 p₁, 내년에 살아남을 확률 p₂, …”처럼 이산 확률로 다룬다. 보험회사의 life table이 대표적.

  2. 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의 두 가지 한계를 동시에 해제한다.

  1. Proportional 가정 해제: NSR은 λ_0(t) · exp(β'x) 같은 곱 구조를 강제하지 않는다. LSTM hidden state h_i에서 직접 Λ_i = softrelu(W·h_i)로 hazard 곡선 전체를 신경망으로 그린다. 사용자별·시점별로 곡선의 모양이 자유롭게 달라질 수 있다.

  2. 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✅ 고정 지수 커널
NSRsoftrelu(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 곡선 전체를 신경망으로 학습.

관련 연구

태그

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}
}