[ProDS] 실기 - 회귀분석

swb·2022년 11월 23일

단순 회귀분석

주요함수

1. ols()

  • ols() 함수 내에 종속변수와 독립변수 선언
  • ols() 함수의 fit() 메서드로 모델 적합
  • 변수명에 온점 등 특정 특수문자가 있는 경우 오류 발생
  • 모댈 객체의 predict() 메서드로 예측

2. LinearRegression()

  • 함수 내 fit_intercept로 절편 적합 여부 설정 가능
  • fit() 메서드에 학습 데이터 할당 가능
  • coef_intercept_ 어트리뷰트로 각각 계수와 절편 확인 가능
  • 모델 객체의 predict() 메서드로 예측

3. mean_absolute_error()

  • MAE 연산

4. mean_sqaured_error()

  • 해당 결과에 제곱근 연산을 하면 RMSE 계산 가능

01. 종속변수를 registered, 독립변수를 temp로 했을 때 결정계수는?

df = pd.read_csv("bike.csv")

df_train, df_test = train_test_split(df, train_size = 0.7, random_state = 123)

model = ols(formula = "casual ~ atemp", data = df_train).fit()
pred = model.predict(df_test)
model.summary() # R-squared 값 보면 됨

02. 종속변수를 casual, 독립변수를 atemp로 했을 때 RMSE는?

df = pd.read_csv("bike.csv")

df_train, df_test = train_test_split(df, train_size = 0.7, random_state = 123)

model = ols(formula = "casual ~ atemp", data = df_train).fit()
pred = model.predict(df_test)

mean_squared_error(y_pred = pred,
				   y_true = df_test["casual"]) ** 0.5

03. 종속변수를 casual, 독립변수를 atemp로 했을 때 여름과 겨울의 RMSE 차이는?

df = pd.read_csv("bike.csv")

df_summer = df.loc[df["season"] == 2, ]
df_winter = df.loc[df["season"] == 4, ]

df_s_train, df_s_test = train_test_split(df_summer, train_size = 0.7, random_state = 123)
df_w_train, df_w_test = train_test_split(df_winter, train_size = 0.7, random_state = 123)

model_s = ols(formula = "casual ~ atemp", data = df_s_train).fit()
model_w = ols(formula = "casual ~ atemp", data = df_w_train).fit()

pred_s = model_s.predict(df_s_test)
pred_w = model_w.predict(df_w_test)

RMSE_S = mean_squared_error(y_pred = pred_s,
							y_true = df_s_test["casual"]) ** 0.5
RMSE_W = mean_squared_error(y_pred = pred_w,
							y_true = df_w_test["casual"]) ** 0.5
                            
abs(RMSE_S - RMSE_W)

## 다중 회귀분석

주요함수

1. dmatrices()

  • 분산 팽창 계수 확인을 위해 입력 데이터를 전처리 할 때 필요한 함수
  • return_type 인자에 dateframe으로 설정 시 후처리 용이

2. variance_inflation_factor()

  • 반복문 또는 list comprehension 사용

01. Price를 종속변수로 하고 나머지 수치형 변수를 독립변수로 했을 때 다중 공선성의 문제가 있다고 판단되는 변수의 개수는?

df = pd.read_csv("diamonds.csv")

db_sub = df.iloc[:, [6,0,4,5,7,8,9]] # 수치형 데이터만 뽑기
y, X = dmatrices(" price ~ " + " + ".join(df_sub.coulmuns[1:]), 
				 data = df_sub, return_type = "dataFrame")
df_vif = pd.DataFrame()
df_vif["vars"] = X.columns
df_vif["VIF"] = [vif(X.values, i) for i in range(X.shape[1])]
df_vif # 10 이상인 값들 총 4개

02. price를 종속변수로 하고 carat과 depth를 독립변수로 하여 생성한 선형 회귀 모델을 사용하여 알아본 carat이 1이고 depth가 60, table이 55인 다이아몬드의 가격은 얼마인가?

df = pd.read_csv("diamonds.csv")
model = ols(formula = "price ~ carat + depth", data = df).fit()
df_test = pd.DataFrame({"carat":[1], "depth":[60], "table":[55]})
model.predict(df_test)

03. price를 종속변수로 하고, carat, color, depth를 독립변수로 하여 생성한 선형 회귀 모델을 사용하여 알아본 carat이 1이고 depth가 50, color가 E인 다이아몬드의 가격은 얼마인가?

df = pd.read_csv("diamonds.csv")

df_sub = df.loc[:, ["price", "carat", "color", "depth"]]
df_dum = pd.get_dummies(df_sub, columns = ["color"], drop_first = True)

model = ols(forumula = "price ~ " + "+".join(df_dum.columns[1:]), 
			data = df_dum).fit()
df_test = df_dum.iloc[[0], ]
df_test["carat"] = 1
df_test["depth"] = 50
model.predict(df_test)
profile
개발 시작

0개의 댓글