새 직원을 뽑으려고 하는데 이 직원을 A라고 하겠다.
A는 20년의 경력을 가지고 있고 이전 회사에서 16만 달러의 연봉을 받았다고 말하고 있다.
그리고 이전 회사에서는 Region Manager 직급으로 2년간 일했다고 하고 있다.
그럼 이 직원에게 제시 될 연봉은 6행과 7행 사이의 어딘가가 될 것이다. (이를 대강 6.5 수준의 급여라고 하겠다)
다중 회귀를 통해서 위 내용이 사실인지 거짓인지 알아보자.
일단 Position과 Level은 사실상 같은 내용이기 때문에 2, 3열만 가지고 모델을 만들 것이다.
dataset = dataset[2:3]
데이터 세트가 작으니 이번에는 훈련 세트와 테스트 세트를 나누지 않고 진행할 예정이다.
이 데이터 세트에 선형 회귀가 어울릴지, 다항 회귀가 어울릴지 아직 정확히 우린 모르기 때문에 둘 다 해보고 어떤 방식이 더 맞는지 볼 것이다.
1. 선형 회귀
lin_reg = lm(formula = Salary ~ .,
data = dataset)
library(ggplot2)
ggplot() +
geom_point(aes(x = dataset$Level, y = dataset$Salary),
colour = 'red') +
geom_line(aes(x = dataset$Level, y = predict(lin_reg, newdata = dataset)),
colour = 'blue') +
ggtitle('Truth or Bluff (Linear Regression)') +
xlab('Level') +
ylab('Salary')
이를 그래프로 나타내면 이와 같다. 딱 봐도 이건 아니다 싶다...
데이터가 비선형적이기 때문에 선형 회귀와는 맞지 않다.
2. 다항 회귀
dataset$Level2 = dataset$Level^2
dataset$Level3 = dataset$Level^3
dataset$Level4 = dataset$Level^4
다항 회귀 모델을 만들기 위해 더 높은 차 항을 추가해주어야한다. 더 높은 차수까지 추가해줄 수 있지만 일단 4차까지만 추가해주도록 한다.
poly_reg = lm(formula = Salary ~ .,
data = dataset)
library(ggplot2)
ggplot() +
geom_point(aes(x = dataset$Level, y = dataset$Salary),
colour = 'red') +
geom_line(aes(x = dataset$Level, y = predict(poly_reg, newdata = dataset)),
colour = 'blue') +
ggtitle('Truth or Bluff (Polynomial Regression)') +
xlab('Level') +
ylab('Salary')
다항 회귀를 이용하면 좀 더 새 직원에 대해 6.5수준의 급여를 쉽게 측정할 수 있을 것 같은 느낌이 든다. 와우!
3. 6.5 수준의 급여를 측정해보기
- 선형 회귀 모델을 이용한 측정
predict(lin_reg, data.frame(Level = 6.5))
결과값 : 330378.8
- 다항 회귀 모델을 이용한 측정
predict(poly_reg, data.frame(Level = 6.5,
Level2 = 6.5^2,
Level3 = 6.5^3,
Level4 = 6.5^4))
결과값 : 158862.5
이는 A가 말한 16만 달러와 매우 비슷한 결과고, 우리는 A가 정직한 사람이라는 것을 알았다. 그리고 우리는 이 결과를 통해 A와 올바른 협상을 이어나갈 수 있을 것이다.
R 코드 템플릿
# Polynomial Regression
# Importing the dataset
dataset = read.csv('Position_Salaries.csv')
dataset = dataset[2:3]
# Splitting the dataset into the Training set and Test set
# # install.packages('caTools')
# library(caTools)
# set.seed(123)
# split = sample.split(dataset$Salary, SplitRatio = 2/3)
# training_set = subset(dataset, split == TRUE)
# test_set = subset(dataset, split == FALSE)
# Feature Scaling
# training_set = scale(training_set)
# test_set = scale(test_set)
# Fitting Linear Regression to the dataset
lin_reg = lm(formula = Salary ~ .,
data = dataset)
# Fitting Polynomial Regression to the dataset
dataset$Level2 = dataset$Level^2
dataset$Level3 = dataset$Level^3
dataset$Level4 = dataset$Level^4
poly_reg = lm(formula = Salary ~ .,
data = dataset)
# Visualising the Linear Regression results
# install.packages('ggplot2')
library(ggplot2)
ggplot() +
geom_point(aes(x = dataset$Level, y = dataset$Salary),
colour = 'red') +
geom_line(aes(x = dataset$Level, y = predict(lin_reg, newdata = dataset)),
colour = 'blue') +
ggtitle('Truth or Bluff (Linear Regression)') +
xlab('Level') +
ylab('Salary')
# Visualising the Polynomial Regression results
# install.packages('ggplot2')
library(ggplot2)
ggplot() +
geom_point(aes(x = dataset$Level, y = dataset$Salary),
colour = 'red') +
geom_line(aes(x = dataset$Level, y = predict(poly_reg, newdata = dataset)),
colour = 'blue') +
ggtitle('Truth or Bluff (Polynomial Regression)') +
xlab('Level') +
ylab('Salary')
# Visualising the Regression Model results (for higher resolution and smoother curve)
# install.packages('ggplot2')
library(ggplot2)
x_grid = seq(min(dataset$Level), max(dataset$Level), 0.1)
ggplot() +
geom_point(aes(x = dataset$Level, y = dataset$Salary),
colour = 'red') +
geom_line(aes(x = x_grid, y = predict(poly_reg,
newdata = data.frame(Level = x_grid,
Level2 = x_grid^2,
Level3 = x_grid^3,
Level4 = x_grid^4))),
colour = 'blue') +
ggtitle('Truth or Bluff (Polynomial Regression)') +
xlab('Level') +
ylab('Salary')
# Predicting a new result with Linear Regression
predict(lin_reg, data.frame(Level = 6.5))
# Predicting a new result with Polynomial Regression
predict(poly_reg, data.frame(Level = 6.5,
Level2 = 6.5^2,
Level3 = 6.5^3,
Level4 = 6.5^4))
- x_grid에 대한 추가 설명
0.1 단위의 Level을 추가(1.0, 1.1, 1.2, ..., 9.9, 10.0)하여 부드러운 곡선을 만드는 법
'AI > 회귀' 카테고리의 다른 글
[회귀 - 14] R을 이용한 서포트 벡터 회귀 실습 (0) | 2022.04.25 |
---|---|
[회귀 - 13] 서포트 벡터 회귀(Support Vector Regression)란? SVR (0) | 2022.04.24 |
[회귀 - 11] 다항 회귀(Polynomial Linear Regression)란? (0) | 2022.04.24 |
[회귀 - 10] 후진 소거법 (Backward Elimination) (0) | 2022.04.24 |
[회귀 - 9] 다중 선형 회귀 (0) | 2022.04.24 |
댓글