일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Datascientist
- 데이터전처리
- associateDS
- SDSBrightics
- 브라이틱스
- samsungsds
- ProDS
- 코딩없이데이터분석
- 브라이틱스데이터분석
- kaggle
- 서울시상권분석
- AdSP
- Brightics
- 삼성sds
- 회귀모형평가
- 데이터분석대외활동
- Brightics서포터즈
- Kaggle출전
- BrighticsStudio
- houseprice
- 상권배후지
- 모델링
- 삼성자격증
- 브라이틱스서포터즈
- 데이터분석
- 삼성SDSBrightics
- EDA
- 분석모델링
- IT멘토링
- 골목상권데이터분석
- Today
- Total
Database for Everything
[삼성 SDS Brightics] 회귀② - 다중선형회귀와 벌점화회귀 - 건물의 효율을 높이는 주택을 지어보자 본문
[삼성 SDS Brightics] 회귀② - 다중선형회귀와 벌점화회귀 - 건물의 효율을 높이는 주택을 지어보자
Yeenn 2021. 7. 26. 23:06
지난 포스팅↓에서는 단순회귀분석 실습을 다루었었는데요,
https://yeenn-db.tistory.com/21
[삼성 SDS Brightics] 회귀① - 단순선형회귀모형(Linear Regression)-부모의 키는 자식에게 유전될까?
안녕하세요! yeenn입니다. 무사히 brightics 홍보영상미션도 마무리되어서 이제는 팀 분석 미션을 준비중에 있는데요..! (사실 아직 제작한 영상이 유튜브 업로드 전이라..조금 떨리네요ㅎ 과연 내
yeenn-db.tistory.com
이번 실습에서는 Brightics를 사용한 다중선형회귀&벌점화회귀모형 실습을 다루어보도록 하겠습니다!
[이론학습]
다중선형회귀
다중선형회귀(multiple linear regression)란 독립변수가 두 개 이상인 선형회귀모형을 이용한 회귀분석입니다.
→ 더미변수
실무에서는 다중선형회귀분석을 매우 자주 이용하는데, 그 이유는 더미변수(dummy variable)를 사용하기 위함입니다. 더미변수란, 0 또는 1의 값을 갖는 변수로, 범주형인 독립변수를 회귀모형에 이용하기 위해 만들어낸 변수를 의미합니다.
→ 다중공선성
다중공선성(multicollinearity)이란, 다중회귀모형에서 하나의 독립변수가 다른 독립변수들과 선형적인 관계를 보이는 현상을 의미합니다. 다중공선성이 발생하게 되면, 관련이 있는 독립변수들과 관련된 추정치들의 신뢰성이 크게 떨어지게되는데요, 이런 독립변수들간의 다중공선성 판별을 위해서는 주로 분산팽창계수(variance inflation factor(VIF))를 이용합니다.
일반적으로 VIF값이 5또는 10이상이면 다중공선성이 존재한다고 판단할 수 있으며, 이를 해결하기 위한 방법으로는
1. 중복된 변수를 제거: 변수선택
2. 중복된 변수를 변환하여 새로운 변수를 생성: 주성분분석
3. 중복된 변수의 영향력을 일부만 사용: ridge, lasso
위와 같은 것들이 있습니다.
벌점화회귀
통계학에서 모형을 추정한다는 것은, 어떠한 비용함수(cost function)를 최소로 만드는 모수들을 찾는 과정으로 이해할 수 있는데요, 어떤 경우에는 비용함수를 최소화하는 모수 추정 방법이 적절하지 않을 수도 있습니다. 모형의 복잡도를 증가시키며 함수를 추정하는 방법보다는 현재 주어진 자료에만 잘 맞는 과적합(over-fitting)현상을 피하여 앞으로 얻어질 미래의 자료에도 잘 맞도록 모형을 만들 수 있어야 합니다.
따라서, 모형의 평가 기준인 예측력과 안정성을 위해기존의 비용 함수에 벌점함수를 더한 형태의 새로운 비용함수를 정의하고, 이러한 비용함수를 최소화하는 모수를 찾는 과정인규제(regularization)를 거친 벌점화 회귀(penalized regression)를 예측에 사용할 수 있습니다.
회귀계수축소법 - (Ridge회귀, Lasso회귀, Elastic net)
회귀계수 축소법의 기본적인 공통원리는 SSE(잔차)에 Penalty를 더하여 [SSE + f(x)(= 패널티)]를 함께 축소시키는 것을 목표로 합니다. 기본적으로 다중선형회귀와 유사하나, 계수 축소법에서는 잔차에다가 회귀계수를 최소화하는 과정을 거치게 됩니다.
이러한 회귀계수축소법에는 3가지가 있는데요,
1. Ridge 회귀
Ridge 회귀는 선형 회귀모델의 비용함수에 패널티를 적용한 것입니다. 여기서 페널티는 Lambda * 계수 coefficient 제곱의 합인데요,
이때 Lambda 값이 0에 가까워지면 Ridge는 본래 선형회귀모델의 비용함수에 가까워지게 됩니다. 반면에 Lambda의 값이 어느 정도 크다면, coefficient의 크기가 줄어서(0에 가까워져서) 모델의 복잡도가 줄어들고, 다중공선성 문제의 영향을 줄일 수 있습니다.
2. Lasso 회귀
Lasso회귀와 Ridge회귀의 한 가지 차이점은, 패널티의 계산이 Lambda * coefficient 제곱합이 아니라 Lambda * coefficient 절대값의 합이라는 것입니다. 이 계산은 L1 정규화 방식이고, zero coefficient 를 만드는 것이 가능해집니다.
즉, 어떤 독립변수의 경우 아예 사라지게 될 수도 있게 되면서 상대적으로 더 중요한 독립변수를 선택할 수 있게 됩니다.
→Ridge회귀와 Lasso회귀의 차이점
Ridge와 Lasso의 가장 큰 차이는 Ridge는 계수를 0에 근사하도록 축소하나, Lasso는 계수를 완전하게 0으로 축소시킨다는 점입니다. 따라서, Ridge의 경우 입력변수가 전반적으로 비슷한 수준으로 출력변수에 영향을 미치는 경우 사용하고, Lasso의 경우 출력변수에 미치는 입력변수의 영향력 편차가 큰 경우에 사용합니다.
3. Elastic Net
Elastic-Net 회귀는 Lasso와 Ridge의 하이브리드 회귀모델이라고 할 수 있습니다. lambda1과 lambda2는 각각 Ridge와 Lasso 속성에 대한 강도를 조절하는 요소인데요, 이를 통해 Ridge의 정규화 속성과 Lasso의 변수축소 속성을 둘 다 갖는 모델임을 알 수 있습니다.
Lasso회귀는 상관관계가 있는 다수의 변수들 중 하나를 무작위 선택하여 계수를 축소하는 반면, Elastic-Net회귀는 상관성이 높은 다수의 변수들을 모두 선택하거나 제거하는 모델인데요, Elastic Net회귀는 이러한 방식을 통해 group effect를 유도하기 떄문에 다수의 변수간에 상관관계가 존재할 때 유용합니다.
[실습]
분석 목표: 전원주택을 짓는데 있어 건물의 효율(난방부하)을 높이기 위해 어떤 요인이 중요한지 알아보고, 그 영향력을 파악하고자 한다.
dataset
변수명 | 설명 |
relative_compactness | 상대적 조밀도 |
surface_area | 표면적(m²) |
wall_area | 벽면적(m²) |
roof_area | 지붕면적(m²) |
overall_height | 전체 높이(3.5m: 1층/7m: 2층) |
orientation | 집의 방향(2:north/3:east/4:south/5:west) |
glazing_area | 유치창 면적(%) |
glazing_area_distribution | 유리창 방향(0:all/1:none/2:north/3:east/4:south/5:west) |
heating_load | 난방부하(kWh/m²) |
cooling_load | 냉방부하(kWh/m²) |
※ 해당 포스팅은 Brightics Github에 수록된 dataset을 활용하여 작성되었습니다.
0. Data Flow Model
이번 실습의 Work Flow Model은 위와 같습니다.
1. Data Load
local file에서 energy.csv파일을 불러와 load 해줍니다. Delimiter은 Comma로 설정해주세요!
2. Datatype 변환(범주형 변수의 더미화)
Data type을 변환해주는데에는 두 가지 방법이 있는데요, 하나는 data load 화면에서 형을 변경해주는 것, 두번째는 select column함수를 불러와 형을 변환해주는 것 입니다.
이번 실습에서는 Select Column함수를 사용하여 범주형으로 인식되어야 하는 변수 overall_height, orientation, glazing_aria_distribution 3가지를 우선 String형으로 변환해보겠습니다!
그 다음, 범주형으로 변수를 더미변수화 하기 위하여 One Hot Encoder을 사용해보겠습니다.
Input Columns에는 더미변수화가 필요한 변수 overall_heignt, orientation, glazing_area_distribution을 넣고,
Prefix Type: use existing column name(s)
Suffix Type: Label
Drop Last: True
를 설정한 후, Run을 눌러주세요.
결과 table을 살펴보면, 더미변수화가 완료된 변수가 추가 생성된 것을 확인할 수 있습니다!
3. Split Data
그 다음, Split Data를 이용하여, train set과 test set으로 data를 나누어줍니다.
Train Ratio: 7
Test Ratio: 3
Seed: 123
을 입력하고 Run을 줄러주세요!
7:3으로 데이터가 잘 분할이 된 것 같습니다.
4. 다중선형회귀모형 적합
그 다음은, Linear Regression Train을 사용하여 다중선형회귀분석을 수행합니다.
입력변수 X가 포함되는 Feautre Columns에는 cooling_load와 heating_load를 제외한 모든 변수를 선택해주시고,
예측변수 Y가 포함되는 Label Column에는 heating_load를 선택해주세요!
(건물의 효율(난방부하)를 높이는 것이 이번 회귀분석의 목표이기 때문이겠죠?)
Intercept: True
VIF(다중공선성 측정): True
로 지정해주시고, Run을 눌러주세요.
결과 table을 살펴볼까요?
결정계수(R-squared, Adj.R-squared)값을 확인해보면, 0.923, 0.921로 매우 높은 것으로 확인되었습니다.
하지만, 일반적으로 VIF값이 10이상이면 다중공선성이 높은 변수라고 판단하는데, 위의 table을 보시면 VIF>10으로 VIF값이 매우 높은 변수가 존재하기 때문에,
이 모형을 그대로 사용하는 것은 적절하지 않을 것이라고 판단했습니다.
따라서, 이러한 변수간 다중공선성이 존재하는 모형을 개선하기 위해
'벌점화회귀모형'을 이용해보도록 하겠습니다!
5. 벌점화회귀모형 적합
벌점화회귀모형이란?
벌점화회귀는 다중공선성이 있는 다중선형회귀분석에서 변수선택과 동시에 모형을 추정하는 회귀분석방법입니다.
Penalized Linear Regresssion 을 이용하여 Lasso 회귀분석을 수행해보겠습니다.
Feature Columns에는 앞의 다중선형회귀분석의 변수와 동일하게 heating_load와 cooling_load를 제외한 14개 변수를 넣어주시고,
Label Column에도 위와 동일하게 heating_load를 넣어주세요.
그 다음, Regression Type에 Lasso를 설정하고,
제약조건의 정도를 설정하는 Regularization(Penalty Weight)값을 0.7로 설정해주세요.
(위 값을 0으로 설정하면, 다중선형회귀분석과 동일한 결과가 나오게 됩니다..!)
결과를 살펴보면,
roof_area와 surface_area변수는 그 값이 커질수록 heating_load(난방부하)가 작아지고, wall_area변수는 그 값이 커질수록 heating_load가 커지고, 나머지 변수들은 크게 유효하지 않은 것으로 판단되었습니다.
벌점화회귀모형이 판단한 위 결과는, 다중선형회귀분석에서 변수들간의 종속성 때문에
실제 유효한 변수가 아닌 변수들의 영향력이 매우 크게 추정된 결과와는 다른 결과를 보이고 있어,
다중공선성이 존재하는 모형이 개선되었음을 확인할 수 있었습니다!
6. 벌점화회귀모형 예측
그 다음, Penalized Linear Regression Predict를 불러와, Split 함수와 Penalized Linear Regression Train을 연결하고,
Inputs 항목에 Split된 Data의 test_table을 연결해준 후, Run을 누르면
prediction 변수가 생성되었음을 확인할 수 있습니다.
산점도를 그려 예측 결과를 시각화해볼까요?
Chart Type: Scatter plot
X-axis: prediction
Y-axis: heating_load
를 설정하고 Run을 누르면,
위와 같은 산점도가 그려지는데요, 이를 통해 예측값과 실제값의 수준이 비슷함을 확인할 수 있었습니다!
본 게시물은 Brightics 서포터즈 활동의 일환으로 작성된 포스팅 입니다.