안녕하세요! 데이터 분석에 관심 있는 분들, 모두 환영해요! 🤗 오늘은 R을 이용해서 선형 회귀 모델을 만들어보는 방법에 대해 알아보려고 해요.
R에서 선형 회귀 모델하면 왠지 어렵게 느껴지시나요? 걱정 마세요! 제가 오늘 lm() 함수 사용법부터 차근차근 설명해 드릴게요. 선형 회귀 모델의 기본 원리를 이해하고 나면, 모델 평가 및 해석하는 것도 훨씬 쉬워질 거예요. 실제 데이터 적용 예시까지 준비했으니, 함께 재미있게 공부해 봐요! 😉
선형 회귀 모델의 기본 원리
자, 이제 드디어 본격적으로 선형 회귀 모델의 기본 원리에 대해 알아볼 시간이에요! 선형 회귀는 통계학에서 가장 기본적이면서도 강력한 모델 중 하나랍니다. 마치 만능 열쇠처럼 다양한 분야에서 활용되고 있어요. 그럼, 함께 선형 회귀의 매력에 푹 빠져볼까요~?
선형 회귀 분석이란?
선형 회귀 분석은 간단히 말해서, 독립 변수(x)와 종속 변수(y) 사이의 선형 관계를 모델링하는 것이에요. “선형 관계”라는 말이 어렵게 느껴질 수도 있지만, 걱정 마세요! 쉽게 말해 x 값이 변할 때 y 값도 일정한 비율로 변한다는 뜻이랍니다. 예를 들어, 공부 시간(x)이 늘어날수록 시험 점수(y)도 비례해서 올라간다고 생각해 보세요. 이런 관계를 바로 선형 관계라고 부르는 거죠!
선형 관계의 수학적 표현
이러한 관계를 수학적으로 표현하면 어떻게 될까요? 바로 y = ax + b
라는 간단한 공식으로 나타낼 수 있어요! 여기서 ‘a’는 기울기, ‘b’는 y 절편을 의미한답니다. 기울기 ‘a’는 x가 1만큼 변할 때 y가 얼마나 변하는지를 나타내는 값이고, y 절편 ‘b’는 x가 0일 때 y의 값을 의미해요.
오차항을 고려한 선형 회귀 모델
하지만 현실 세계에서는 이렇게 딱 떨어지는 선형 관계만 존재하는 건 아니죠. 대부분의 경우에는 오차가 발생하게 돼요. 예를 들어 아무리 공부를 열심히 해도 시험 당일 컨디션이나 문제 유형에 따라 점수가 달라질 수 있잖아요? 이러한 오차까지 고려해서 선형 회귀 모델을 만들어야 더 정확한 예측을 할 수 있답니다.
그래서 실제 선형 회귀 모델은 y = ax + b + ε
와 같이 오차항(ε, 엡실론)을 포함해요. 이 오차항은 평균이 0이고 정규 분포를 따르는 무작위 변수로 가정한답니다. 핵심은 예측값과 실제값 사이의 차이를 설명하기 위해 오차항을 포함한다는 것이에요!
선형 회귀 모델의 예시
자, 그럼 이제 조금 더 구체적인 예시를 들어볼까요? 가령 아이스크림 판매량과 기온 사이의 관계를 분석한다고 가정해 봅시다. 기온이 높아질수록 아이스크림 판매량도 증가할 것이라고 예상할 수 있겠죠? 이때 기온은 독립 변수(x), 아이스크림 판매량은 종속 변수(y)가 된답니다. 선형 회귀 모델을 통해 기온과 아이스크림 판매량 사이의 관계를 나타내는 ‘a’와 ‘b’ 값을 구할 수 있고, 이를 통해 특정 기온에서의 아이스크림 판매량을 예측할 수 있게 되는 거죠!
다중 선형 회귀 모델
물론 실제로는 기온 외에도 아이스크림 가격, 광고 효과 등 다양한 요인들이 판매량에 영향을 미칠 수 있어요. 이러한 여러 변수들을 고려한 다중 선형 회귀 모델도 있답니다! 다중 선형 회귀 모델은 y = a1x1 + a2x2 + ... + anxn + b + ε
와 같은 형태로 표현돼요. 변수가 많아져서 조금 복잡해 보이지만, 기본 원리는 단순 선형 회귀와 동일해요. 각 독립 변수의 계수(a1, a2, …, an)를 추정하여 종속 변수(y)를 예측하는 것이죠.
최소제곱법(OLS)
선형 회귀 모델을 구축하는 과정에서 가장 중요한 것은 바로 최적의 ‘a’와 ‘b’ 값을 찾는 거예요. 이때 주로 사용되는 방법이 최소제곱법(OLS, Ordinary Least Squares)이랍니다. 최소제곱법은 실제값과 예측값의 차이(잔차)의 제곱합을 최소화하는 방향으로 ‘a’와 ‘b’ 값을 추정하는 방법이에요. 잔차 제곱합을 최소화하면 예측 모델의 정확도를 높일 수 있기 때문이죠! 수학적으로는 다소 복잡한 계산 과정을 거치지만, R과 같은 통계 소프트웨어를 사용하면 아주 간단하게 계산할 수 있답니다.
선형 회귀 모델의 장점
이처럼 선형 회귀 모델은 비교적 간단하면서도 강력한 예측 도구예요. 다양한 분야에서 활용될 수 있고, 해석하기도 쉬워서 많은 사람들에게 사랑받는 모델이랍니다!
lm() 함수 사용법
드디어! R에서 선형 회귀 모델을 만들어주는 lm()
함수를 만나볼 시간이에요! 마치 레고 블록처럼, lm()
함수는 데이터를 가지고 멋진 통계 모델을 만들어낼 수 있게 해준답니다. 어떻게 사용하는지, 하나하나 차근차근 알아볼까요?
lm() 함수의 기본 구조
lm()
함수의 기본적인 구조는 정말 간단해요. 마치 마법 주문처럼 lm(y ~ x, data = 데이터프레임)
이렇게 생겼답니다. 여기서 y
는 우리가 예측하고 싶어 하는 종속 변수, x
는 예측에 사용할 독립 변수, 그리고 data
에는 우리가 분석할 데이터가 담긴 데이터프레임 이름을 넣어주면 돼요! 참 쉽죠?!
예를 들어, sales
라는 데이터프레임에 광고 지출(advertising
)과 매출(sales
) 데이터가 있다고 해볼게요. 매출을 광고 지출로 예측하는 모델을 만들고 싶다면, lm(sales ~ advertising, data = sales)
이렇게 작성하면 된답니다. 이 간단한 코드 한 줄이면, R은 마법처럼 선형 회귀 모델을 뚝딱 만들어낸답니다!
여러 개의 독립 변수 사용
자, 이제 좀 더 복잡한 마법 주문을 배워볼까요? 여러 개의 독립 변수를 사용하고 싶다면 어떻게 해야 할까요? 걱정 마세요, lm()
함수는 여러분의 마음을 다 알고 있답니다! 독립 변수들을 +
기호로 연결해주기만 하면 돼요. 예를 들어, 광고 지출(advertising
)과 제품 가격(price
)을 모두 사용해서 매출(sales
)을 예측하고 싶다면, lm(sales ~ advertising + price, data = sales)
라고 작성하면 된답니다.
상호작용 효과
더 나아가, 만약 광고 지출과 제품 가격의 상호작용 효과까지 고려하고 싶다면 어떻게 해야 할까요? 이것도 lm()
함수는 거뜬히 해낼 수 있답니다! *
기호를 사용하면, 상호작용 효과까지 포함된 모델을 만들 수 있어요. lm(sales ~ advertising * price, data = sales)
이렇게 작성하면 된답니다. 이 코드는 lm(sales ~ advertising + price + advertising:price, data = sales)
와 같은 의미랍니다! :
기호는 두 변수의 상호작용 항을 의미해요.
변수 변환 및 제곱
하지만, 여기서 끝이 아니에요! lm()
함수는 더욱 강력한 기능들을 숨기고 있답니다. 변수 변환이나 특정 변수 제곱을 사용하고 싶다면 I()
함수를 사용하면 된답니다. 예를 들어, advertising
변수의 제곱을 사용하고 싶다면, lm(sales ~ advertising + I(advertising^2), data = sales)
이렇게 작성하면 돼요! I()
함수를 사용하면 R에게 “이 안의 내용을 있는 그대로 계산해줘!”라고 명령하는 것과 같아요.
범주형 변수
또한, 범주형 변수를 사용할 때는 더욱 주의해야 해요! 범주형 변수를 그대로 사용하면 R은 이를 연속형 변수로 인식할 수 있기 때문이죠. 이런 경우 factor()
함수를 사용해서 변수를 범주형으로 변환해 주어야 한답니다. 예를 들어, region
이라는 범주형 변수가 있다면, lm(sales ~ advertising + factor(region), data = sales)
이렇게 작성하면 돼요!
모델 확인
lm()
함수를 사용해서 만든 모델은 summary()
함수를 통해 자세히 살펴볼 수 있어요. summary()
함수는 모델의 계수, R-squared 값, p-value 등 다양한 정보를 제공해준답니다. 이러한 정보들을 통해 모델의 성능을 평가하고, 어떤 변수가 유의미한 영향을 미치는지 파악할 수 있어요!
자, 이제 여러분은 lm()
함수의 마법사가 되었어요! 다양한 옵션과 기능들을 활용해서 자신만의 멋진 선형 회귀 모델을 만들어 보세요!
모델 평가 및 해석
휴~, 드디어 모델을 만들었어요! 하지만 이제부터가 진짜 시작이라는 거 아시죠? 만든 모델이 얼마나 괜찮은지, 믿을 만한지 꼼꼼하게 따져봐야 하잖아요~ 마치 갓 구운 빵을 두드려보며 속이 잘 익었는지 확인하는 것처럼 말이에요! 자, 그럼 우리가 만든 선형 회귀 모델을 평가하고 해석하는 방법을 같이 알아볼까요? ^^
우선, R의 lm()
함수로 만든 모델은 summary()
함수를 통해 다양한 정보를 제공해준답니다. 마치 모델의 건강검진 결과표 같아요! 여기에는 R-squared, Adjusted R-squared, F-statistic, p-value, 잔차 표준 오차(Residual Standard Error) 등 여러 가지 지표가 빽빽하게 적혀있죠. 하나씩 살펴보면서 모델의 상태를 진단해보자구요!
1. R-squared (결정계수)
이 녀석은 우리 모델이 데이터를 얼마나 잘 설명하는지 보여주는 지표예요. 0부터 1 사이의 값을 가지는데, 1에 가까울수록 모델이 데이터의 변동성을 잘 설명한다는 뜻이죠. 예를 들어 R-squared 값이 0.8이라면, 종속 변수의 변동 중 80%를 우리 모델이 설명한다는 의미랍니다. “오~ 꽤 설명을 잘하는구나!”라고 생각하면 되겠죠? 하지만 함정이 있어요! 설명 변수를 마구잡이로 추가하면 R-squared 값은 계속 증가할 수 있거든요. 그래서 Adjusted R-squared를 함께 봐야 한답니다!
2. Adjusted R-squared (수정된 결정계수)
이 친구는 설명 변수의 개수를 고려해서 R-squared 값을 조정해줘요. 불필요한 변수가 추가될 때 R-squared 값이 뻥튀기되는 것을 막아주는 역할을 하죠. R-squared와 Adjusted R-squared 값의 차이가 크다면, 모델에 쓸모없는 변수가 포함되어 있을 가능성이 높다는 신호! “어라? 뭔가 이상한데?” 싶으면 변수를 다시 한번 검토해봐야겠죠?
3. F-statistic (F-통계량) & p-value
얘네들은 모델 전체의 유의성을 검정하는 데 사용돼요. F-통계량은 모델이 우연히 얻어진 것이 아닌, 실제로 유의미한 관계를 나타내는지를 판단하는 기준이에요. p-value는 이 F-통계량에 대한 확률값인데, 일반적으로 0.05보다 작으면 모델이 통계적으로 유의미하다고 판단한답니다. “와! 우리 모델, 꽤 괜찮은데?!”라고 자신 있게 말할 수 있는 순간이죠!
4. 잔차 표준 오차 (Residual Standard Error)
이건 모델의 예측값과 실제값의 차이, 즉 잔차의 표준편차예요. 값이 작을수록 모델의 예측 정확도가 높다는 뜻이죠. “오차가 작다니! 정말 다행이야~!”라고 안도의 한숨을 쉴 수 있겠네요.
5. 계수 (Coefficients)
각 설명 변수의 계수는 종속 변수에 대한 영향력을 나타내요. 계수의 부호는 영향의 방향(양/음)을, 크기는 영향의 강도를 의미하죠. 그리고 각 계수에 대한 p-value는 해당 변수가 통계적으로 유의미한지 여부를 알려준답니다. “이 변수가 중요하구나!” 또는 “이 변수는 별로 영향을 안 주네?”라고 판단할 수 있는 근거가 되는 거죠.
이러한 지표들을 종합적으로 분석해서 모델의 성능을 평가하고, 변수 선택 및 모델 개선에 활용할 수 있어요. 하지만! 숫자에만 매몰되지 않고, 데이터의 특성과 분석 목적을 함께 고려하는 것이 중요하다는 점, 잊지 마세요! 데이터 분석은 단순히 숫자 놀음이 아니라, 데이터 속에 숨겨진 이야기를 발견하는 과정이니까요! 자, 이제 여러분도 summary()
함수와 친해져서 모델 평가의 달인이 되어보세요! 화이팅!!
실제 데이터 적용 예시
자, 이제 드디어! R의 lm()
함수를 이용해서 실제 데이터를 분석해 볼 시간이에요! 두근두근~? 여기서는 Kaggle에서 제공하는 Boston Housing Dataset을 사용해 볼 거예요. 이 데이터셋은 보스턴 주택 가격과 관련된 다양한 변수들을 포함하고 있어서, 선형 회귀 분석 연습하기에 딱! 좋아요. ^^
패키지 설치 및 데이터 로드
먼저, 필요한 패키지를 설치하고 데이터를 불러와야겠죠? MASS
패키지에 Boston 데이터가 포함되어 있으니 설치가 안 되어 있다면 설치해 주세요!
# 필요한 패키지 설치 및 로드
if(!require(MASS)) install.packages("MASS")
library(MASS)
# 데이터 로드
data(Boston)
# 데이터 미리보기
head(Boston)
Boston 데이터셋에는 crim
(범죄율), zn
(25,000 평방피트를 초과하는 주택 지역 비율), indus
(비소매업 비즈니스 면적 비율), chas
(찰스강 인접 여부), nox
(산화질소 농도), rm
(주택당 평균 방 개수), age
(1940년 이전에 건설된 주택 비율), dis
(5개의 보스턴 고용 센터까지의 가중 거리), rad
(방사형 고속도로 접근성 지수), tax
(10,000달러당 재산세율), ptratio
(학생-교사 비율), black
(1000(Bk – 0.63)^2, Bk는 흑인 비율), lstat
(하위 계층 인구 비율), medv
(소유 주택의 중앙값 (단위: 1,000달러)) 등 다양한 변수가 있어요. 이 중에서 우리는 medv
(주택 가격)를 종속 변수로 하고, 다른 변수들을 독립 변수로 사용해서 선형 회귀 모델을 만들어 볼 거예요.
🤔 어떤 변수가 주택 가격에 가장 큰 영향을 미칠까요? 한번 예측해 보는 것도 재밌겠죠?!
lm() 함수를 사용한 모델 생성
자, 이제 lm()
함수를 사용해서 모델을 만들어 봅시다! 먼저, 주택 가격(medv
)에 영향을 미치는 변수로 rm
(주택당 평균 방 개수)와 lstat
(하위 계층 인구 비율)을 사용해 볼게요.
# lm() 함수를 사용하여 선형 회귀 모델 생성
model <- lm(medv ~ rm + lstat, data = Boston)
# 모델 요약 정보 출력
summary(model)
summary()
함수를 사용하면 모델에 대한 다양한 정보를 확인할 수 있어요! Residuals, Coefficients, R-squared, F-statistic 등등… 복잡해 보이지만 하나씩 살펴보면 어렵지 않아요!
Coefficients 부분을 보면, 각 변수의 추정된 계수와 p-value를 확인할 수 있어요. rm
의 계수가 양수인 것으로 보아 방의 개수가 많을수록 주택 가격이 높아지는 경향이 있다는 것을 알 수 있고, lstat
의 계수가 음수인 것으로 보아 하위 계층 인구 비율이 높을수록 주택 가격이 낮아지는 경향이 있다는 것을 알 수 있어요. p-value가 매우 작으므로 (*** 표시) 두 변수 모두 통계적으로 유의미한 영향을 미친다고 볼 수 있겠네요!
R-squared 값은 모델의 설명력을 나타내는 지표인데, 이 값이 높을수록 모델이 데이터를 잘 설명한다는 의미예요. 이 경우 Adjusted R-squared 값이 약 0.64 정도니까, rm
과 lstat
두 변수만으로 주택 가격 변동의 약 64%를 설명할 수 있다는 뜻이에요. 꽤 높은 설명력이죠?!
다른 변수 추가 및 모델 비교
이제 다른 변수들도 추가해서 모델을 만들어보고, 어떤 변수 조합이 주택 가격을 가장 잘 설명하는지 비교해 볼 수도 있어요. 예를 들어, 범죄율(crim
)이나 찰스강 인접 여부(chas
)와 같은 변수를 추가하면 어떻게 될까요? 직접 해보면서 모델의 성능을 비교해 보는 것도 좋은 학습 방법이 될 거예요! 😊
# 다른 변수 추가하여 모델 생성
model2 <- lm(medv ~ crim + chas + rm + lstat, data = Boston)
# 모델 요약 정보 출력
summary(model2)
crim
과 chas
를 추가했더니 Adjusted R-squared 값이 조금 더 높아졌네요?! 🎉 이처럼 다양한 변수 조합을 시도해보면서 최적의 모델을 찾아가는 과정이 바로 데이터 분석의 묘미라고 할 수 있겠죠? 😉
과적합 문제
하지만, 무작정 변수를 많이 추가한다고 해서 항상 좋은 모델이 되는 건 아니에요! 🤔 오히려 과적합(overfitting) 문제가 발생할 수도 있으니 주의해야 해요. 과적합은 모델이 학습 데이터에 너무 잘 맞춰져서 새로운 데이터에 대한 예측 성능이 떨어지는 현상을 말해요. 마치 족집게 과외 선생님처럼 기출문제는 완벽하게 풀지만, 새로운 유형의 문제는 풀지 못하는 것과 비슷하다고 생각하면 돼요.
추가 학습 필요
그래서! 변수 선택이나 모델 평가에 대한 추가적인 학습도 꼭 필요해요! 💪 다중공선성, 변수 선택 방법, 교차 검증 등등… 배워야 할 내용이 많지만, 차근차근 공부하다 보면 데이터 분석의 세계에 더욱 깊이 빠져들게 될 거예요! 😄
이렇게 Boston Housing Dataset을 활용해서 lm()
함수를 사용하는 방법을 알아보았어요! 실제 데이터를 가지고 분석해보니 더 재밌지 않았나요? 다른 데이터셋을 사용해서 직접 분석해보는 것도 좋은 연습이 될 거예요! 화이팅! 👍
자, 이렇게 R에서 선형 회귀 모델을 만드는 방법과 lm() 함수 사용법, 그리고 모델 평가까지 쭉 살펴봤어요! 어때요, 이제 좀 선형 회귀 분석이 친숙하게 느껴지나요? 처음엔 어려워 보였던 분석도, 막상 해보면 생각보다 재밌고 흥미롭다는 걸 알게 될 거예요. R과 함께라면 데이터 분석의 세계가 더욱 넓어진답니다. 앞으로 여러분의 데이터 분석 여정에 든든한 길잡이가 되어줄 선형 회귀 모델, 이제 자신 있게 활용해보세요! 다음에는 더 재밌는 분석 이야기로 찾아올게요! 기대해 주세요!
답글 남기기