HOWTO · R

R 선형 회귀 모델에서 `predict()` 함수 사용하기

R에서 적합한 선형 회귀 모델에 predict()를 적용하고, newdata 형식과 모델 공식에 맞는 특성 열 이름을 지정하는 방법을 알아봅니다.

이 페이지의 내용

R에서 적합한 선형 회귀 모델로 응답값을 예측하려면 모델과 데이터 프레임을 newdata로 전달해 predict()를 호출합니다. 데이터 프레임에는 모델 공식에 사용한 이름과 정확히 일치하는 특성 열이 있어야 합니다. 예를 들어 lm(Response ~ Feature, data = training)으로 적합한 모델은 newdata에 이름이 정확히 Feature인 열을 요구합니다.

R의 선형 회귀 모델에서 predict() 함수 사용

다음 독립 실행형 예제는 정상적으로 실행되어 예측값 세 개를 반환합니다. 작은 학습용 데이터 프레임을 만들고 모델을 적합한 다음, 새로운 특성값 세 개에 대한 예측을 요청합니다. 공식에서 Response는 추정할 값이고 Feature는 입력값입니다. predict()는 newdata의 각 행에 대해 예측값 하나를 반환합니다.

Feature <- 15:24
set.seed(654)
Response <- 2 * Feature + 5 + rnorm(10, mean = 0, sd = 3)
training <- data.frame(Response = Response, Feature = Feature)
model <- lm(Response ~ Feature, data = training)

newdata <- data.frame(Feature = c(20.5, 16.5, 22.5))
predict(object = model, newdata = newdata)

이 호출은 predict()가 적합된 model을 newdata의 각 행에 적용하도록 하며, 입력한 행 순서대로 행마다 추정값 하나를 반환합니다. Feature 값은 적합된 관계에 넣는 입력이고, Response는 추정 대상입니다. object와 newdata라는 인수 이름을 지정하면 각 인수의 역할이 분명해지고, lm()에 사용한 학습 데이터가 아니라 어느 데이터 프레임으로 예측하는지도 쉽게 확인할 수 있습니다.

새 값은 벡터만 전달하지 말고 데이터 프레임으로 전달해야 합니다. predict(model, newdata = c(20.5, 16.5, 22.5))처럼 호출하면 이 모델의 예측 메서드가 기대하는 표 형식의 입력이 제공되지 않습니다. 공식에 적힌 특성 열 이름도 일치시켜야 합니다. data.frame(NewFeature = c(20.5, 16.5, 22.5))으로 만든 데이터 프레임에는 적합된 공식이 요구하는 Feature 열이 없습니다. 이 경우 R이 모델의 원래 환경에서 Feature를 찾을 수 있으며, 그 결과 행 수 경고가 발생하거나 요청한 세 값을 사용하지 않은 예측값이 반환될 수 있습니다. 구체적인 동작은 해당 환경에서 어떤 변수를 사용할 수 있는지에 따라 달라지므로, 값이 반환되었다는 이유만으로 새 값이 사용되었다고 판단하면 안 됩니다. 의도한 입력을 명시적으로 전달하려면 data.frame(Feature = ...) 형태로 newdata를 만드세요.

예제를 변형할 때는 모델 공식과 예측 데이터를 서로 맞추세요. 모델에서 다른 예측 변수 이름을 사용한다면 newdata의 열에도 같은 이름을 사용해야 합니다. 예측 변수가 여러 개라면 공식에 사용된 각 변수의 열을 포함하세요. 그러면 각 행은 모델이 Response를 추정할 개별 사례 하나를 나타냅니다. 모델 객체에는 적합 과정의 정보도 저장되므로, 예측 데이터에는 의도한 새 사례를 기술하고 학습 변수를 실수로 반복하거나 이름을 바꾸지 않도록 하세요.

출력은 숫자형 예측 벡터이며, 새로 적합된 모델이나 원래 입력값을 포함하는 표가 아닙니다. 입력값과 추정값을 나란히 확인하려면 newdata를 보관하고 반환된 벡터와 결합해 데이터 프레임을 만드세요. 예를 들어 호출 결과를 predicted 같은 변수에 저장한 다음, Feature = newdata$Feature와 Response = predicted를 열로 갖는 결과 표를 만들 수 있습니다. 이렇게 하면 요청한 각 특성값과 해당 추정값의 대응 관계가 명확해집니다. 불확실성 구간이 필요하면 predict.lm()의 구간 옵션을 사용할 수 있습니다. 점 추정치 대신 구간이 필요한 작업이라면 해당 옵션을 선택하세요.