Keras로 모델을 한 번 만들어도 epochs, validation_split, 출력층 활성화 함수, 손실 함수 등을 섞어서 기억하기 쉽다. 아래 질문은 단순 암기보다 코드 속 옵션을 왜 그렇게 선택했는지 설명하는 연습에 초점을 맞췄다.
Sequential만으로도 많은 딥러닝 모델을 만들 수 있다. 하지만 서비스에서는 입력 데이터의 종류가 서로 다르거나 하나의 모델이 여러 결과를 동시에 예측해야 할 수 있다.
학습 정확도가 높아질수록 좋은 모델일까? 항상 그렇지는 않다. 학습 데이터에서는 99%를 맞히지만 처음 보는 사용자 데이터에서는 결과가 나빠지는 경우가 있다. 이것이 과적합(Overfitting) 의 대표적인 모습이다.
표 형태의 데이터뿐 아니라 이미지를 분류할 때도 신경망을 사용할 수 있다. 다만 이미지에는 높이·너비·채널이라는 추가적인 구조가 있다. 이번 글에서는 이미지를 픽셀 배열로 읽고, Dense 신경망으로 분류하고, 잘못 예측한 사례를 살펴보는 과정을 실습한다.
회원 상태가 '일반/휴면/탈퇴' 중 하나이거나 고객 문의 유형이 여러 가지로 나뉜다면 다중 분류(Multiclass Classification) 가 필요하다. 이진 분류와 가장 다른 부분은 출력층의 노드 수, 활성화 함수, 정답 인코딩 방식에 따른 손실 함수다.
고객이 구독을 해지할지, 결제가 실패할지, 사용자가 알림을 클릭할지처럼 결과가 두 가지인 문제를 이진 분류(Binary Classification) 라고 한다. 이진 분류의 핵심은 회귀와 달리 결과를 확률로 표현하고, 그 확률을 기준에 따라 클래스에 할당한다는 점이다.
딥러닝으로 숫자를 예측하는 가장 기본적인 작업은 회귀(Regression) 다. 배송 시간, 서비스 이용량, 주문 금액처럼 연속된 수치를 예측할 때 사용한다. 이번에는 가상의 쇼핑몰 행동 데이터로 시작해 전처리부터 신경망 학습, 성능 평가까지 직접 연결해 본다.
모델에 데이터를 넣고 fit()을 호출하면 어느 순간 예측이 가능해진다. 그런데 모델 내부에서는 정확히 어떤 일이 일어나는 걸까? 딥러닝을 제대로 활용하려면 복잡한 수식을 모두 외우기보다 예측 → 오차 계산 → 가중치 수정이라는 흐름을 이해하는 것이 먼저다.
머신러닝 모델을 만들었다고 끝은 아니다. KNN은 이웃을 몇 개 살펴볼지, 결정트리는 얼마나 깊게 성장시킬지, 랜덤 포레스트는 트리를 몇 개 만들지 선택해야 한다. 이처럼 학습 전에 개발자가 설정하는 값을 하이퍼파라미터(Hyperparameter)라고 한다.
한 사람의 판단보다는 여러 사람의 판단을 모으면 더 안정적인 결론을 얻을 때가 있다. 머신러닝에서도 하나의 모델만 사용하는 대신 여러 모델의 예측을 결합하는 방법을 사용한다.이 접근을 앙상블(Ensemble)이라고 한다. 대표적인 기법인 Bagging과 Boosting
Logistic Regression이라는 이름을 처음 보면 회귀 모델이라고 생각하기 쉽다. 하지만 Scikit-learn에서 LogisticRegression은 분류를 위한 알고리즘이다.
"사용자가 결제 버튼을 눌렀는가?", "최근 오류가 있었는가?", "재시도 횟수가 기준 이상인가?"처럼 조건문을 따라 결과를 판단하는 방식은 개발자에게 익숙하다.결정트리(Decision Tree)는 이런 질문을 여러 단계로 나누어 데이터를 구분하는 머신러닝 알고리즘이다
새로운 사용자에게 가장 비슷한 기존 사용자들을 찾아 관심 있을 만한 콘텐츠를 추천한다고 생각해 보자. 여기서 가장 기본적인 질문은 누가 얼마나 가까운 이웃인가?이다.
웹 서비스의 처리 시간이 무엇에 따라 달라지는지 알고 싶다고 하자. 요청 크기가 커질수록 시간이 오래 걸릴까? 동시에 접속한 사용자 수가 늘어나면 얼마나 느려질까?
스팸 메일 탐지기나 결제 이상 거래 탐지기는 결과가 둘 중 하나로 나뉘는 분류 모델이다. 그런데 "100개 중 95개를 맞혔다"는 사실만으로 좋은 모델이라고 말할 수 있을까? 위험한 거래가 100건 중 2건뿐이라면 모든 거래를 정상으로 예측해도 정확도는 98%가 나온다
웹 서비스의 다음 주 주문 금액을 예측하는 모델을 만들었다고 하자. 예측 결과가 53만 원이고 실제 금액이 50만 원이었다면 예측은 3만 원 빗나갔다. 하지만 평가 대상이 수백 건이라면 오차를 하나씩 나열해서는 모델의 품질을 판단하기 어렵다.
데이터를 분석하다 보면 자연스럽게 다음 질문이 생긴다. 지금까지의 사용 기록을 보고, 새로운 사용자가 결제를 완료할지 예측할 수 있을까? 과거 데이터의 패턴을 이용해 새로운 데이터에 대한 판단을 내리는 것이 머신러닝(Machine Learning)의 대표적인 역할이다.
기본문법을 안다고 바로 프로그램을 설계할 수 있는 것은 아니다. 실제 요구사항은 "어떤 입력을 받아 무엇을 반환해야 하는가"부터 결정해야 한다. 이번에는 주문 데이터를 요약하고 페이지 단위로 조회하는 작은 기능을 작성하면서 문제를 코드로 바꾸는 과정을 연습해 보자.
웹 서비스에서는 요청 처리, 로그 수집, 데이터 가공처럼 여러 작업을 다룬다. 자바는 스레드로 작업을 병행하고, 람다와 Stream으로 데이터 처리 로직을 간결하게 표현할 수 있다.
자바 프로그램이 조금만 커져도 외부 데이터와 상호작용해야 한다. 사용자가 입력한 숫자를 읽고, 파일에 결과를 저장하고, 잘못된 입력이 들어왔을 때 안전하게 실패해야 한다. 이 과정을 이해하려면 입출력과 예외 처리를 함께 보는 것이 좋다.