은행 거래내역 자동 분류 — 빨라지는 것보다 매달 같은 답이 나오는 게 먼저였다

월 장부 4단계에서 마지막 단계가 수동 등록과 통장 대사라고 썼다. 매달 제일 오래 걸리는 게 거기다. 리스료, 대출이자, 관리비, 임대료처럼 매달 같은 자리에서 같은 모양으로 오가는 거래를 매번 손으로 계정과목에 붙인다. 판단할 것이 없는데 시간만 든다.

이 부분을 프로그램에 넘겼다. 넘기고 나서 알게 된 것은, 얻은 게 속도가 아니었다는 점이다.

반복 판단은 사람이 틀린다

손으로 분류할 때 곤란했던 건 느린 게 아니라 매달 답이 달라지는 것이었다. 지난달에 내부 이동으로 빼둔 거래를 이번 달엔 지출로 넣는다. 둘 다 그럴듯해서 그때그때 다르게 판단한다. 나중에 두 달을 나란히 놓고 보면 같은 거래가 다른 계정에 앉아 있다.

그래서 규칙을 코드가 아니라 데이터로 남기기로 했다. 적요에 특정 문자열이 들어가면 어느 계정으로, 내 계좌들 사이를 오간 돈은 지출이 아닌 내부 이동으로. 이런 판단을 표에 적어둔다. 판단이 기록으로 남고, 다음 달에도 같은 표를 통과하니 같은 답이 나온다.

중요한 건 그 규칙을 처음 적재할 때와 나중에 다시 돌릴 때 같은 코드가 쓰게 만든 것이다. 규칙을 하나 고치고 재적용을 돌리면 지난달 것까지 새 기준으로 다시 분류된다. 규칙과 이미 쌓인 결과가 어긋날 일이 없다.

두 번 넣는 것과 빠뜨리는 것

자동화하면 새로 생기는 사고가 있다. 같은 파일을 두 번 넣는 것이다.

계좌, 날짜, 시각, 적요, 금액, 잔액을 이어붙여 해시를 만들고 그걸 열쇠로 삼았다. 같은 거래가 두 번 들어오면 해시가 같아서 무시된다. 파일을 겹쳐 넣어도 원장이 부풀지 않는다.

문제는 잔액이 없는 자료다. 문자 알림으로 들어오는 건 잔액이 안 찍힐 때가 있는데, 그러면 같은 날 같은 금액의 거래 둘을 구분할 방법이 없다. 그래서 잔액 자리에 "그날 그 계좌 안에서 같은 내용의 몇 번째냐"를 대신 넣었다. 진짜로 두 번 있었던 거래는 순번이 달라 둘 다 살아남고, 같은 파일을 두 번 넣으면 순번까지 같아져 중복으로 걸린다.

여기엔 함정이 하나 있다. 잔액 없는 자료를 하루 중간에서 잘라 두 번에 나눠 보내면 순번이 각 묶음 안에서만 세어져서, 멀쩡한 거래가 중복으로 잡혀 사라진다. 이건 고치는 대신 도구 설명문에 적어뒀다. 쓰는 쪽이 알고 피하면 되는 종류의 한계라고 봤다.

빠뜨리는 건 잔액으로 잡는다. 앞 줄 잔액에 이번 금액을 더한 값이 이번 줄 잔액과 다르면, 그 사이에 못 읽은 거래가 있다는 뜻이다. 합계가 맞아도 장부가 틀릴 수 있다에서 사람이 눈으로 하던 그 대사를, 이제 적재할 때마다 프로그램이 한다.

정리

사람이 하는 일은 둘로 줄었다. 규칙에 안 걸린 미분류 거래를 손으로 분류하는 것, 그게 반복되면 규칙을 하나 더 추가하는 것. 규칙이 쌓일수록 미분류가 줄어서 매달 할 일이 조금씩 줄어든다.

사람이 손으로 고친 분류는 자동 규칙이 덮어쓰지 않게 했다. 자동이 사람을 이기면 매달 같은 자리를 다시 고치게 된다.

정리하면 얻은 것은 속도가 아니라 재현성이다. 같은 입력에 같은 답이 나오고, 왜 그 답이 나왔는지 규칙 표를 보면 안다. 시간이 줄어든 건 그 다음에 따라온 것이다.

세무 판단은 세무사와 국세청이 최종이다. 이 글은 내가 내 장부를 어떻게 넣는지의 기록이지, 이렇게 하라는 안내가 아니다.