실습 1: 가역성과 영점

스무딩된 피드에서 일별 수치를 복원할 수 있을까?

한 공급업체가 위키백과 문서 ‘Black Friday (shopping)’의 일별 조회수를 7일 평균으로 스무딩한 뒤 정수로 제공한다고 가정한다[4]. 평균값에서 원래 일별 수치를 계산해낼 수 있을까? 대수적으로는 가능해 보이지만, 정수 반올림과 시작 시점의 정보 부족 때문에 복원 결과에는 오차가 남고, 그 오차는 사라지지 않는다.

실습에서는 공급업체가 제공하는 값과 복원 시도, 복원 오차를 살펴본다.

평균을 되돌리면 영점이 극점이 된다

가역성은 출력값으로부터 입력값을 계산해낼 수 있는 성질이다. H(z)는 계산에 사용되는 가중치를 하나의 식으로 나타낸 것이다. 영점은 계산이 특정 패턴을 완전히 지우는 주파수이며, 7일 평균에는 주간 주기의 영점이 있다. 단위원은 극점 지도에서 크기가 1인 z의 집합이다. 단위원 안쪽의 극점은 오차를 점차 줄이지만, 단위원 위의 극점은 오차를 줄이지 않는다. 역연산은 1/H(z)이므로 원래 식의 모든 영점은 역연산의 극점이 된다.

정확한 수치와 시작 시점을 알고 있다면 평균은 종이에 적힌 식으로는 가역적이다. 오늘의 값은 ‘오늘의 평균 × 7’에서 이전 6일의 값을 빼서 구할 수 있다. 이 재귀 계산은 원래 데이터를 완벽하게 복원한다. 하지만 피드에는 정확한 수치도, 시작 시점의 일별 값도 없다.

그래도 재귀 계산을 실행하면 오차가 어떻게 이어지는지 볼 수 있다. 피드가 시작되기 전 6일의 값은 알 수 없으므로, 복원은 그 값들을 추정하는 데서 출발한다. 이후 날짜의 결과에는 그 추정 오차가 계속 반영된다. 각 날짜의 오차는 이전 6일의 오차를 더하고 부호를 바꾼 값에 반올림으로 생기는 최대 몇 회의 조회수 오차가 더해진 것이다. 오차를 더하고 부호를 바꾸는 계산은 오차를 줄이지 않으므로 처음의 실수는 사라지지 않고 주간 단위로 되풀이된다.

더 근본적인 정보 손실도 있다. 7개의 동일한 가중치가 한 주 전체를 덮기 때문에, 주간 주기에 따라 오르내리는 패턴은 각 평균 구간 안에서 상쇄된다. 따라서 공급업체가 보낸 값에는 그 패턴의 흔적이 없다. 피드가 만들어지기 전에 해당 주간 패턴에 0을 곱한 셈이므로, 이후의 계산으로 되살릴 수 없다.

교재의 용어로 설명하면, 평균은 H(z) = (1 + z⁻¹ + … + z⁻⁶)/7이다. z⁻¹은 하루 전을 뜻하며, 각 날짜가 1/7의 가중치를 갖는다. 상쇄되는 주간 주기는 이 식의 영점이다. 복원 재귀식은 H(z)로 나누는 것과 같고, 나눗셈을 하면 각 영점이 역연산의 극점으로 바뀌어 단위원 위에 놓인다. 사라진 주간 패턴을 복원하려면 0으로 나눠야 한다. 단위원 위의 극점은 남아 있는 오차가 줄어들지 않는 이유를 수식으로 보여준다. 이 패턴까지 필요하다면 원시 피드를 구매해야 한다.

교재 참고: 1.6.2절과 2.3.5절의 가역성, 10.4절의 z-평면에서의 극점과 영점 및 역연산에 따른 교환[3].