Skip to main content
Summary

분류를 잠시 지나오면서 우리는 "정답의 종류를 고르는 문제"를 살펴보았습니다. 이제 다시 회귀로 돌아와 보겠습니다. 회귀는 숫자를 예측하는 문제였고, 그중에서도 선형회귀는 가장 단순하면서도 가장 중요한 출발점입니다.

선형회귀가 중요한 이유는 단지 오래된 모델이기 때문이 아닙니다. 선형회귀 안에는 머신러닝의 거의 모든 기본 동작이 압축되어 있습니다. 데이터를 본다. 예측한다. 실제값과 비교한다. 틀린 만큼 모델을 조정한다. 다시 예측한다. 이 단순한 반복이 바로 학습의 핵심입니다.

선형회귀는 머신러닝이라는 넓은 숲에 들어가기 전, 숲의 지도를 처음 손에 쥐는 순간과 같습니다.

선형회귀

직선을 하나 그어 보는 순간

집의 넓이와 가격 사이의 관계를 생각해 봅시다. 일반적으로 집이 넓을수록 가격은 비싸집니다. 물론 항상 그런 것은 아닙니다. 위치, 건물 상태, 층수, 주변 환경 같은 요소가 함께 영향을 줍니다. 그래도 "넓이가 커지면 가격도 대체로 오른다"는 흐름은 꽤 자연스럽습니다.

이때 가장 단순하게 할 수 있는 일은 데이터 위에 직선 하나를 그어 보는 것입니다.

가로축에는 집의 넓이를 놓고, 세로축에는 집값을 놓습니다. 각각의 집은 그래프 위의 점 하나가 됩니다. 작은 집은 왼쪽 아래에, 큰 집은 오른쪽 위에 있을 가능성이 큽니다. 선형회귀는 이 점들 사이를 가장 그럴듯하게 지나가는 직선을 찾으려 합니다.

여기서 중요한 표현은 "완벽하게 지나는"이 아니라 "가장 그럴듯하게 지나는"입니다. 실제 데이터는 깔끔하지 않습니다. 같은 넓이의 집이라도 역세권이면 비쌀 수 있고, 오래된 건물이면 쌀 수 있습니다. 모든 점을 정확히 통과하는 직선은 거의 없습니다. 선형회귀가 찾는 것은 모든 데이터를 완벽하게 맞히는 마법의 선이 아니라, 전체적으로 봤을 때 예측 오차가 작은 선입니다.

직선 하나가 생기면 우리는 새로운 질문에 답할 수 있습니다.

"아직 가격을 모르는 30평짜리 집이 있다면, 대략 얼마일까?"

그래프에서 30평에 해당하는 지점으로 가서 직선을 만납니다. 그때의 세로축 값이 모델의 예측값입니다. 이처럼 선형회귀는 입력값을 받아 직선 위의 한 점으로 바꾸고, 그 점의 높이를 예측값으로 내놓습니다.

선형회귀의 가장 작은 식

선형회귀를 설명할 때 자주 등장하는 식이 있습니다.

예측값 = 기울기 × 입력값 + 절편

조금 더 짧게 쓰면 다음과 같습니다.

ŷ = w × x + b

기호가 나오면 갑자기 어렵게 느껴질 수 있지만, 내용은 단순합니다. x는 입력값입니다. 집값 예측 문제라면 집의 넓이가 될 수 있습니다. ŷ는 모델이 예측한 값입니다. 실제 집값이 아니라, 모델이 "이 정도일 것 같은데?" 하고 내놓은 숫자입니다.

w는 기울기입니다. 입력값이 1만큼 늘어날 때 예측값이 얼마나 변하는지를 나타냅니다. 집의 넓이가 1평 늘어날 때 가격이 얼마나 올라간다고 볼 것인지 정하는 숫자입니다.

b는 절편입니다. 입력값이 0일 때 출발점이 어디인지 정하는 값입니다. 현실에서 넓이가 0평인 집을 예측하려는 것은 아니지만, 직선을 그래프 위에 놓기 위해 필요한 기준점이라고 생각하면 됩니다.

결국 선형회귀가 학습한다는 것은 w와 b를 잘 찾는 일입니다. 모델은 처음부터 좋은 기울기와 절편을 알고 있지 않습니다. 처음에는 엉뚱한 선을 그을 수 있습니다. 그러다 데이터를 보고, 예측이 얼마나 틀렸는지 확인하고, 조금씩 선을 돌리고 위아래로 옮깁니다.

기울기는 방향을, 절편은 위치를 바꾼다

직선을 손에 들고 있다고 상상해 봅시다. 기울기를 바꾸면 직선이 회전합니다. 오른쪽으로 갈수록 더 가파르게 올라가게 만들 수도 있고, 거의 평평하게 만들 수도 있습니다. 절편을 바꾸면 직선 전체가 위나 아래로 이동합니다.

예를 들어 집의 넓이가 늘어날수록 가격이 빠르게 오른다면 기울기는 커야 합니다. 반대로 넓이가 조금 늘어도 가격 차이가 크지 않은 지역이라면 기울기는 작아야 합니다. 모든 예측이 전반적으로 낮게 나오고 있다면 절편을 위로 올려야 할 수도 있습니다. 모든 예측이 지나치게 높다면 절편을 낮춰야 합니다.

이때 학습은 매우 현실적인 행동처럼 볼 수 있습니다.

처음 그은 선이 대부분의 집값을 낮게 예측한다면 모델은 "내가 너무 낮게 보고 있구나" 하고 선을 올립니다. 작은 집은 그럭저럭 맞히는데 큰 집을 계속 낮게 예측한다면 "넓이가 커질수록 가격이 더 빨리 올라가야겠구나" 하고 기울기를 키웁니다.

모델은 사람처럼 생각하지는 않지만, 결과만 보면 비슷합니다. 틀린 방향을 보고, 틀림이 줄어드는 방향으로 숫자를 고칩니다.

좋은 직선은 어떻게 고를까

데이터 위에 직선을 그을 수 있는 방법은 셀 수 없이 많습니다. 조금 더 가파른 선, 조금 더 완만한 선, 위로 올라간 선, 아래로 내려간 선. 그렇다면 어떤 선이 좋은 선일까요?

선형회귀에서는 보통 예측값과 실제값의 차이를 봅니다. 실제 집값이 5억 원인데 모델이 4억 5천만 원이라고 예측했다면 5천만 원만큼 틀렸습니다. 실제 집값이 3억 원인데 3억 2천만 원이라고 예측했다면 2천만 원만큼 틀렸습니다.

각 데이터마다 이런 차이가 생깁니다. 이 차이를 오차라고 부릅니다. 선형회귀는 전체 데이터에서 오차가 작아지는 방향으로 기울기와 절편을 조정합니다.

여기서 한 가지 조심할 점이 있습니다. 어떤 데이터에서는 예측이 실제보다 높고, 어떤 데이터에서는 실제보다 낮을 수 있습니다. 그냥 오차를 더하면 양수와 음수가 서로 상쇄되어 버립니다. 그래서 선형회귀에서는 오차를 제곱해서 더하는 방식이 자주 쓰입니다. 오차를 제곱하면 음수도 양수가 되고, 크게 틀린 예측은 더 크게 벌점을 받습니다.

이것을 평균제곱오차라고 부릅니다. 이름은 조금 딱딱하지만 뜻은 쉽습니다.

"각 예측이 얼마나 틀렸는지 제곱해서 평균을 낸 값."

모델의 목표는 이 값을 작게 만드는 것입니다. 다시 말해 선형회귀의 학습은 다음 질문에 답하는 과정입니다.

"어떤 기울기와 절편을 선택해야 전체적으로 덜 틀릴까?"

이 질문이 바로 머신러닝의 기본 질문입니다.

학습은 직선을 조금씩 고치는 일이다

선형회귀의 학습 과정을 아주 단순하게 풀어 보면 이렇습니다.

처음에는 아무 직선이나 하나 정합니다. 그 직선으로 모든 데이터를 예측해 봅니다. 예측값과 실제값을 비교합니다. 오차가 큽니다. 그러면 기울기와 절편을 조금 바꿉니다. 다시 예측합니다. 오차가 줄었는지 확인합니다. 줄었다면 그 방향으로 더 움직입니다. 오히려 커졌다면 방향을 바꿉니다.

이 과정이 반복되면 직선은 점점 데이터에 잘 맞는 위치로 이동합니다. 마치 어두운 방에서 바닥이 낮아지는 방향을 발끝으로 더듬어 찾아가는 것과 비슷합니다. 지금 선이 좋은지 나쁜지는 오차가 알려 줍니다. 오차가 줄어드는 방향이 모델이 가야 할 방향입니다.

앞 장에서 학습을 "오차를 줄이는 과정"이라고 했습니다. 선형회귀는 그 말을 눈에 보이게 만들어 줍니다. 모델이 복잡한 신경망이 아니어도, 학습의 구조는 이미 여기에 들어 있습니다.

데이터를 준비한다 → 특징을 넣는다 → 모델이 예측한다 → 실제값과 비교한다 → 오차를 계산한다 → 기울기와 절편을 조정한다 → 새로운 데이터에 적용한다.

이 흐름을 이해하면, 이후에 등장하는 더 복잡한 모델도 낯설지 않게 느껴집니다. 모델의 모양이 달라질 뿐, 기본 리듬은 비슷하기 때문입니다.

특징이 하나가 아닐 때

지금까지는 집의 넓이 하나만 가지고 집값을 예측했습니다. 하지만 현실에서는 특징이 하나만으로 충분하지 않은 경우가 많습니다. 집값을 예측하려면 넓이뿐 아니라 방 개수, 지하철역까지의 거리, 건축 연도, 층수, 주변 학군 같은 정보도 함께 보고 싶습니다.

선형회귀는 특징이 여러 개여도 사용할 수 있습니다. 이때 모델은 각 특징에 저마다의 기울기, 즉 가중치를 붙입니다.

예측 집값 = 넓이의 영향 + 방 개수의 영향 + 역까지 거리의 영향 + 건축 연도의 영향 + 기본값

조금 더 식처럼 쓰면 다음과 같습니다.

ŷ = w₁x₁ + w₂x₂ + w₃x₃ + ... + b

여기서 x₁, x₂, x₃는 각각 다른 특징입니다. w₁, w₂, w₃는 각 특징이 예측에 얼마나 영향을 주는지 나타내는 숫자입니다.

예를 들어 집값 예측 모델에서 넓이의 가중치가 크다면 넓이가 가격에 큰 영향을 준다는 뜻입니다. 역까지의 거리에 붙은 가중치가 음수라면, 역에서 멀어질수록 가격이 낮아지는 경향이 있다는 뜻일 수 있습니다. 방 개수의 가중치가 작다면, 이 데이터에서는 방 개수보다 넓이나 위치가 더 중요하게 작용했을 수 있습니다.

이처럼 선형회귀는 여러 특징의 영향력을 더해서 하나의 예측값을 만듭니다. 특징이 하나일 때는 직선을 그었지만, 특징이 두 개라면 평면을 찾는 것에 가깝습니다. 특징이 더 많아지면 우리가 눈으로 그릴 수는 없지만, 원리는 같습니다. 여러 방향으로 펼쳐진 공간에서 데이터에 가장 잘 맞는 납작한 면을 찾는 것입니다.

가중치는 모델이 배운 흔적이다

선형회귀의 매력 중 하나는 모델이 무엇을 배웠는지 비교적 들여다보기 쉽다는 점입니다. 복잡한 모델은 내부에서 무슨 일이 벌어지는지 이해하기 어려울 때가 많습니다. 반면 선형회귀는 각 특징에 붙은 가중치를 보면 모델의 판단 방식을 어느 정도 짐작할 수 있습니다.

고객 이탈 예측을 예로 들어 보겠습니다. 물론 이탈 여부는 분류 문제에 더 가깝지만, 여기서는 이해를 위해 "이탈 위험 점수"라는 숫자를 예측한다고 생각해 보겠습니다. 사용 기간, 최근 접속 횟수, 고객센터 문의 횟수, 월 결제 금액 같은 특징이 있을 수 있습니다.

최근 접속 횟수의 가중치가 음수라면 접속을 자주 할수록 이탈 위험이 낮아지는 경향이 있다고 볼 수 있습니다. 고객센터 문의 횟수의 가중치가 양수라면 문의가 많을수록 불만이나 문제 가능성이 커져 이탈 위험이 높아질 수 있습니다. 월 결제 금액의 가중치는 서비스 종류에 따라 다르게 해석될 수 있습니다.

물론 가중치를 해석할 때는 조심해야 합니다. 가중치가 크다고 해서 언제나 그 특징이 현실에서 절대적으로 중요하다는 뜻은 아닙니다. 특징의 단위가 다르면 가중치 크기도 달라질 수 있습니다. 예를 들어 집의 넓이를 평으로 입력했는지 제곱미터로 입력했는지에 따라 숫자의 크기가 달라집니다. 그래서 실제 분석에서는 특징의 스케일을 맞추는 작업이 필요할 때도 있습니다.

그래도 선형회귀는 모델이 어떤 방향으로 판단하는지 감을 잡기 좋은 모델입니다. 그래서 실제 현장에서도 단순한 기준 모델로 자주 사용됩니다. 복잡한 모델을 쓰기 전에 "일단 선형회귀로 어느 정도까지 가능한가?"를 보는 것은 매우 좋은 습관입니다.

선형회귀가 잘 맞는 경우

선형회귀가 잘 작동하는 문제에는 공통점이 있습니다. 입력이 커질수록 출력이 대체로 일정한 방향으로 변하고, 그 변화가 심하게 휘어 있지 않은 경우입니다.

예를 들어 광고비와 매출의 관계를 생각해 봅시다. 광고비를 늘리면 매출이 증가하는 경향이 있을 수 있습니다. 물론 광고비를 두 배 쓴다고 매출이 항상 두 배가 되지는 않겠지만, 일정 범위 안에서는 꽤 직선에 가까운 관계가 나타날 수 있습니다.

근무 시간과 생산량, 집의 넓이와 가격, 공부 시간과 시험 점수도 제한된 상황에서는 선형회귀로 대략적인 흐름을 잡을 수 있습니다. 핵심은 완벽한 직선 관계가 아니라 "직선으로 근사해도 쓸 만한가"입니다.

머신러닝에서 근사한다는 말은 중요합니다. 모델은 현실을 그대로 복사하지 않습니다. 현실은 복잡하고, 데이터는 불완전합니다. 모델은 그 복잡한 현실을 자신이 표현할 수 있는 방식으로 단순화합니다. 선형회귀는 현실을 직선 또는 평면의 형태로 단순화합니다.

단순화는 약점이기도 하지만 장점이기도 합니다. 너무 복잡한 모델은 데이터의 작은 흔들림까지 외워 버릴 수 있습니다. 반면 선형회귀는 단순하기 때문에 큰 흐름을 보기 좋고, 과하게 복잡해질 위험이 상대적으로 작습니다.

선형회귀가 놓치는 것

하지만 세상의 모든 관계가 직선은 아닙니다. 어떤 관계는 처음에는 빠르게 증가하다가 나중에는 천천히 증가합니다. 어떤 관계는 중간 지점까지는 좋아지다가 그 이후에는 오히려 나빠집니다. 어떤 관계는 특정 조건이 맞을 때만 갑자기 달라집니다.

예를 들어 공부 시간과 시험 점수를 생각해 봅시다. 처음 1시간 공부한 사람과 3시간 공부한 사람의 차이는 클 수 있습니다. 하지만 이미 12시간 공부한 사람이 14시간 공부한다고 해서 점수가 같은 비율로 오르지는 않을 수 있습니다. 오히려 피로 때문에 효율이 떨어질 수도 있습니다. 이 관계는 직선보다는 완만하게 휘어진 곡선에 가까울 수 있습니다.

가격과 수요의 관계도 단순하지 않습니다. 가격이 조금 오를 때는 수요가 크게 줄지 않다가, 어느 순간 심리적 한계선을 넘으면 갑자기 판매량이 떨어질 수 있습니다. 이런 패턴은 직선 하나로 표현하기 어렵습니다.

선형회귀는 이런 곡선적 패턴이나 복잡한 상호작용을 놓칠 수 있습니다. "넓이가 클수록 집값이 오른다"는 흐름은 잡을 수 있지만, "특정 지역에서는 역세권 여부가 훨씬 중요하고, 외곽 지역에서는 넓이가 더 중요하다" 같은 조건부 패턴은 단순 선형회귀로 표현하기 어렵습니다.

이것이 선형회귀의 한계입니다. 선형회귀는 세상을 직선적으로 바라봅니다. 세상이 실제로 꽤 직선적이면 좋은 예측을 합니다. 하지만 세상이 많이 휘어 있으면, 직선은 그 휘어짐을 따라가지 못합니다.

단순한 모델이 주는 힘

그렇다면 선형회귀는 너무 단순해서 별로 쓸모없는 모델일까요? 그렇지 않습니다. 오히려 단순하기 때문에 강력한 순간이 많습니다.

첫째, 이해하기 쉽습니다. 기울기와 절편, 가중치라는 개념만 알면 모델이 예측을 만드는 방식을 따라갈 수 있습니다. 둘째, 빠릅니다. 복잡한 계산을 많이 하지 않아도 학습할 수 있습니다. 셋째, 기준점이 됩니다. 더 복잡한 모델을 만들기 전에 선형회귀를 먼저 돌려 보면, 문제의 기본 난이도를 가늠할 수 있습니다.

예를 들어 집값 예측 프로젝트를 시작했다고 해 봅시다. 처음부터 복잡한 모델을 쓰면 성능이 좋아도 왜 좋은지 알기 어렵습니다. 반면 선형회귀를 먼저 사용하면 "넓이, 위치, 연식만으로도 이 정도까지 예측되는구나"라는 기준을 얻을 수 있습니다. 이후 결정트리나 랜덤포레스트 같은 모델을 사용했을 때, 정말로 성능이 좋아졌는지 비교할 수 있습니다.

머신러닝에서 단순한 모델은 초보자용 장난감이 아닙니다. 좋은 실험의 출발점입니다.

선형회귀로 머신러닝의 뼈대를 잡기

선형회귀를 배웠다는 것은 단지 직선 하나를 배웠다는 뜻이 아닙니다. 우리는 머신러닝의 기본 뼈대를 다시 확인했습니다.

데이터에는 입력과 정답이 있습니다. 모델은 입력을 보고 예측값을 만듭니다. 예측값은 실제값과 비교됩니다. 그 차이가 오차입니다. 오차가 작아지도록 모델 내부의 숫자, 즉 기울기와 절편이 조정됩니다. 학습이 끝난 모델은 처음 보는 입력에 대해서도 예측을 시도합니다.

이 구조는 앞으로 계속 반복됩니다. 로지스틱 회귀에서는 숫자 예측이 아니라 분류를 위해 비슷한 아이디어를 변형합니다. 결정트리는 직선 대신 질문을 나누며 규칙을 만듭니다. 랜덤포레스트와 그래디언트 부스팅은 여러 모델을 조합해 더 강한 예측기를 만듭니다. 딥러닝으로 가면 가중치의 수가 엄청나게 많아지고, 직선 하나가 아니라 복잡한 함수가 만들어집니다.

하지만 출발점은 같습니다.

모델은 처음부터 정답을 알지 못합니다. 데이터를 보고, 틀려 보고, 조금씩 고칩니다.

선형회귀는 이 과정을 가장 투명하게 보여주는 창입니다. 이 창을 통해 학습의 감각을 잡았다면, 이제 우리는 더 복잡한 모델을 만나도 당황하지 않을 준비가 된 것입니다.

다음 장에서는 이름은 비슷하지만 목적은 다른 모델을 만납니다. 로지스틱 회귀입니다. "회귀"라는 이름이 붙어 있지만, 로지스틱 회귀는 숫자를 그대로 예측하기보다 어떤 종류에 속할 확률을 계산하고 분류에 사용됩니다. 선형회귀가 직선으로 숫자를 예측했다면, 로지스틱 회귀는 그 직선적 생각을 분류 문제로 옮겨 갑니다.

책 목록

처음 만나는 머신러닝: 데이터가 스스로 규칙을 배우는 법

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기