이를 위해 우리는 (유저 X 잠재요인) 행렬 P와 (잠재요인 X 컨텐츠) 행렬 Q로 분해하는 접근법을 쓴다.
이 행렬을 구할 수만 있다면 우리는 추후에 특정 유저가 상품에 대한 선호도를 뽑아낼 수 있다.
하지만 처음에 말했다시피 이 행렬은 값이 비어있는 경우가 많기 때문에 이 잠재요인 값들에 대한 행렬을 "근사"해야하는데 이 때 SGD를 사용한다. 초기값을 주고 거기서 그라디언트로 근사한다.
피어슨 유사도 : 추천 시스템은 공분산에서 각자의 표준편차를 곱한 값을 나누는 방식이다. 결국 상호간의 분산이 유사하면 할수록 비슷한 값을 가지고 있기 때문에 이를 활용해서 유사한 상품 추천을 해준다.
시계열 분석 : 시계열은 trend, seasonality, cycle, white noise를 가지고 있고 주기는 Seasonalty와 다르게 일정한 빈도로 일어나지 않는다. 또한 시계열은autoregressive한 특성을 가지고 있어서, 목적변수인 자신의 특성을 활용해서 회귀분석을 한다. 정상성을 가질 수 있도록, 주기성을 빼주는 작업을 차분이라고 한다.
ARIMA
AR모델과 MA모델을 합친 것으로, AR은 얻고자 하는 Xt값을 이전 시점의 X값을 활용하는 것을 말한다.
MA 역시 이전 시점의 값을 활용하는 것은 맞지만, 이전 항에서의 error 텀을 반영하는 것을 말한다.
ARIMA는 여기에 차분이라는 개념을 넣어서 non-stationary한 상황을 대응한다.
DataLoader
def _init_state(self, batch_size = 1):
weight = next(self.parameters()).data #첫 layer의 parameter들의 Device와 데이터 타입을 가져오기 위함
return weight.new(self.n_layers, batch_size, self.hidden_dim).zero()
행렬분해와 SGD 관련 설명
https://big-dream-world.tistory.com/69
DataLoader 관련 설명
https://sanghyu.tistory.com/90
GRU 코드
https://yjs-program.tistory.com/164
https://deep-learning-study.tistory.com/691