Skip to Content

ํšŒ๊ท€๋ถ„์„

์ค‘๊ธ‰๊ณ ๊ธ‰

ํ•™์Šต ๋ชฉํ‘œ

  • ๋‹จ์ˆœ/๋‹ค์ค‘ ์„ ํ˜• ํšŒ๊ท€ ์ดํ•ด
  • ํšŒ๊ท€ ๊ณ„์ˆ˜ ํ•ด์„
  • ๋ชจ๋ธ ํ‰๊ฐ€ (Rยฒ, RMSE)

0. ์‚ฌ์ „ ์ค€๋น„ (Setup)

๋ฐ์ดํ„ฐ ์‹ค์Šต์„ ์œ„ํ•ด CSV ํŒŒ์ผ์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt import statsmodels.api as sm from statsmodels.formula.api import ols # Load Data orders = pd.read_csv('src_orders.csv', parse_dates=['created_at']) items = pd.read_csv('src_order_items.csv') products = pd.read_csv('src_products.csv') # Merge for Analysis df = orders.merge(items, on='order_id').merge(products, on='product_id')

1. ๋‹จ์ˆœ ์„ ํ˜• ํšŒ๊ท€

์ด๋ก 

๋‹จ์ˆœ ์„ ํ˜• ํšŒ๊ท€๋Š” ํ•˜๋‚˜์˜ ๋…๋ฆฝ๋ณ€์ˆ˜(X)๋กœ ์ข…์†๋ณ€์ˆ˜(Y)๋ฅผ ์˜ˆ์ธกํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋ธ: Y = ฮฒโ‚€ + ฮฒโ‚X + ฮต

Python ๊ตฌํ˜„

import statsmodels.api as sm # ๋…๋ฆฝ๋ณ€์ˆ˜์™€ ์ข…์†๋ณ€์ˆ˜ X = df['retail_price'] y = df['sale_price'] # ์ƒ์ˆ˜ํ•ญ ์ถ”๊ฐ€ X = sm.add_constant(X) # ํšŒ๊ท€ ๋ชจ๋ธ ์ ํ•ฉ model = sm.OLS(y, X).fit() # ๊ฒฐ๊ณผ ์ถœ๋ ฅ print(model.summary()) print(f"\nํ•ด์„:") print(f"- ์ ˆํŽธ (ฮฒโ‚€): {model.params['const']:.2f}") print(f"- ๊ธฐ์šธ๊ธฐ (ฮฒโ‚): {model.params['retail_price']:.4f}") print(f"- Rยฒ: {model.rsquared:.4f}") print(f"โ†’ ์ •๊ฐ€๊ฐ€ $1 ์ฆ๊ฐ€ํ•˜๋ฉด ํŒ๋งค๊ฐ€๋Š” ${model.params['retail_price']:.4f} ์ฆ๊ฐ€")
์‹คํ–‰ ๊ฒฐ๊ณผ
OLS Regression Results                            
==============================================================================
Dep. Variable:             sale_price   R-squared:                       1.000
Model:                            OLS   Adj. R-squared:                  1.000
Method:                 Least Squares   F-statistic:                 2.045e+36
Date:                Sat, 20 Dec 2025   Prob (F-statistic):               0.00
Time:                        00:24:23   Log-Likelihood:             5.4535e+06
No. Observations:              181026   AIC:                        -1.091e+07
Df Residuals:                  181024   BIC:                        -1.091e+07
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
================================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
--------------------------------------------------------------------------------
const        -1.644e-15   6.28e-17    -26.160      0.000   -1.77e-15   -1.52e-15
retail_price     1.0000   6.99e-19   1.43e+18      0.000       1.000       1.000
==============================================================================
Omnibus:                   210423.122   Durbin-Watson:                   1.142
Prob(Omnibus):                  0.000   Jarque-Bera (JB):         32784753.264
Skew:                           6.036   Prob(JB):                         0.00
Kurtosis:                      67.813   Cond. No.                         120.
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

ํ•ด์„:
- ์ ˆํŽธ (ฮฒโ‚€): -0.00
- ๊ธฐ์šธ๊ธฐ (ฮฒโ‚): 1.0000
- Rยฒ: 1.0000
โ†’ ์ •๊ฐ€๊ฐ€ $1 ์ฆ๊ฐ€ํ•˜๋ฉด ํŒ๋งค๊ฐ€๋Š” $1.0000 ์ฆ๊ฐ€

2. ๋‹ค์ค‘ ์„ ํ˜• ํšŒ๊ท€

์—ฌ๋Ÿฌ ๋…๋ฆฝ๋ณ€์ˆ˜ ์‚ฌ์šฉ

from statsmodels.formula.api import ols # ์ˆ˜์‹์œผ๋กœ ๋ชจ๋ธ ์ •์˜ model = ols('sale_price ~ retail_price + cost + num_of_item', data=df).fit() print(model.summary()) # ๊ณ„์ˆ˜ ํ•ด์„ print("\n๋ณ€์ˆ˜๋ณ„ ์˜ํ–ฅ:") for var, coef in model.params.items(): if var != 'Intercept': print(f"- {var}: {coef:.4f}")
์‹คํ–‰ ๊ฒฐ๊ณผ
OLS Regression Results                            
==============================================================================
Dep. Variable:             sale_price   R-squared:                       1.000
Model:                            OLS   Adj. R-squared:                  1.000
Method:                 Least Squares   F-statistic:                 9.789e+34
Date:                Sat, 20 Dec 2025   Prob (F-statistic):               0.00
Time:                        00:24:23   Log-Likelihood:             5.2778e+06
No. Observations:              181026   AIC:                        -1.056e+07
Df Residuals:                  181022   BIC:                        -1.056e+07
Df Model:                           3                                         
Covariance Type:            nonrobust                                         
================================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
--------------------------------------------------------------------------------
Intercept    -2.618e-14   2.79e-16    -93.752      0.000   -2.67e-14   -2.56e-14
retail_price     1.0000   9.97e-18      1e+17      0.000       1.000       1.000
cost          1.442e-16   2.16e-17      6.681      0.000    1.02e-16    1.87e-16
num_of_item   2.086e-15   1.17e-16     17.822      0.000    1.86e-15    2.32e-15
==============================================================================
Omnibus:                   174196.359   Durbin-Watson:                   1.677
Prob(Omnibus):                  0.000   Jarque-Bera (JB):         11170271.467
Skew:                          -4.624   Prob(JB):                         0.00
Kurtosis:                      40.355   Cond. No.                         236.
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

๋ณ€์ˆ˜๋ณ„ ์˜ํ–ฅ:
- retail_price: 1.0000
- cost: 0.0000
- num_of_item: 0.0000

๋ฒ”์ฃผํ˜• ๋ณ€์ˆ˜ ํฌํ•จ

# ๋ฒ”์ฃผํ˜• ๋ณ€์ˆ˜๋Š” ์ž๋™์œผ๋กœ ๋”๋ฏธ ์ธ์ฝ”๋”ฉ model = ols('sale_price ~ retail_price + C(department)', data=df).fit() print(model.summary())
์‹คํ–‰ ๊ฒฐ๊ณผ
OLS Regression Results                            
==============================================================================
Dep. Variable:             sale_price   R-squared:                       1.000
Model:                            OLS   Adj. R-squared:                  1.000
Method:                 Least Squares   F-statistic:                 1.018e+36
Date:                Sat, 20 Dec 2025   Prob (F-statistic):               0.00
Time:                        00:24:23   Log-Likelihood:             5.4530e+06
No. Observations:              181026   AIC:                        -1.091e+07
Df Residuals:                  181023   BIC:                        -1.091e+07
Df Model:                           2                                         
Covariance Type:            nonrobust                                         
==========================================================================================
                           coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------------------
Intercept                -1.7e-14   8.01e-17   -212.274      0.000   -1.72e-14   -1.68e-14
C(department)[T.Women] -1.179e-14   9.43e-17   -125.084      0.000    -1.2e-14   -1.16e-14
retail_price               1.0000   7.02e-19   1.42e+18      0.000       1.000       1.000
==============================================================================
Omnibus:                   176025.839   Durbin-Watson:                   1.474
Prob(Omnibus):                  0.000   Jarque-Bera (JB):         15454549.554
Skew:                          -4.573   Prob(JB):                         0.00
Kurtosis:                      47.331   Cond. No.                         213.
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

3. ๋ชจ๋ธ ํ‰๊ฐ€

Rยฒ (๊ฒฐ์ •๊ณ„์ˆ˜)

  • ๋ชจ๋ธ์ด ์„ค๋ช…ํ•˜๋Š” ๋ถ„์‚ฐ์˜ ๋น„์œจ
  • 0~1 ์‚ฌ์ด, ๋†’์„์ˆ˜๋ก ์ข‹์Œ

RMSE (ํ‰๊ท ์ œ๊ณฑ๊ทผ์˜ค์ฐจ)

from sklearn.metrics import mean_squared_error import numpy as np # ์˜ˆ์ธก y_pred = model.predict(df) # RMSE ๊ณ„์‚ฐ rmse = np.sqrt(mean_squared_error(df['sale_price'], y_pred)) print(f"RMSE: ${rmse:.2f}")
์‹คํ–‰ ๊ฒฐ๊ณผ
RMSE: $0.00

๋‹ค์ค‘๊ณต์„ ์„ฑ ํ™•์ธ (VIF)

from statsmodels.stats.outliers_influence import variance_inflation_factor # VIF ๊ณ„์‚ฐ X = df[['retail_price', 'cost', 'num_of_item']] X = sm.add_constant(X) vif_data = pd.DataFrame() vif_data['๋ณ€์ˆ˜'] = X.columns vif_data['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])] print("VIF (10 ์ด์ƒ์ด๋ฉด ๋‹ค์ค‘๊ณต์„ ์„ฑ ์˜์‹ฌ):") print(vif_data)
์‹คํ–‰ ๊ฒฐ๊ณผ
VIF (10 ์ด์ƒ์ด๋ฉด ๋‹ค์ค‘๊ณต์„ ์„ฑ ์˜์‹ฌ):
           ๋ณ€์ˆ˜        VIF
0         const   5.081528
1  retail_price  29.215176
2          cost  29.215126
3   num_of_item   1.000010

ํ€ด์ฆˆ

๋ฌธ์ œ

์ •๊ฐ€(retail_price)์™€ ์›๊ฐ€(cost)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒ๋งค๊ฐ€(sale_price)๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ํšŒ๊ท€ ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ณ , ๊ฐ ๋ณ€์ˆ˜์˜ ์˜ํ–ฅ๋ ฅ์„ ํ•ด์„ํ•˜์„ธ์š”.

์ •๋‹ต ๋ณด๊ธฐ

from statsmodels.formula.api import ols # ๋‹ค์ค‘ ํšŒ๊ท€ ๋ชจ๋ธ model = ols('sale_price ~ retail_price + cost', data=df).fit() print(model.summary()) print("\n=== ํ•ด์„ ===") print(f"Rยฒ: {model.rsquared:.4f} (๋ชจ๋ธ์ด {model.rsquared*100:.1f}%์˜ ๋ถ„์‚ฐ ์„ค๋ช…)") print(f"\n๊ณ„์ˆ˜:") print(f"- ์ •๊ฐ€ $1 ์ฆ๊ฐ€ โ†’ ํŒ๋งค๊ฐ€ ${model.params['retail_price']:.4f} ์ฆ๊ฐ€") print(f"- ์›๊ฐ€ $1 ์ฆ๊ฐ€ โ†’ ํŒ๋งค๊ฐ€ ${model.params['cost']:.4f} ์ฆ๊ฐ€") # p-value ํ™•์ธ for var in ['retail_price', 'cost']: p = model.pvalues[var] sig = "์œ ์˜ํ•จ" if p < 0.05 else "์œ ์˜ํ•˜์ง€ ์•Š์Œ" print(f"- {var}: p={p:.4f} ({sig})")
์‹คํ–‰ ๊ฒฐ๊ณผ
OLS Regression Results                            
==============================================================================
Dep. Variable:             sale_price   R-squared:                       1.000
Model:                            OLS   Adj. R-squared:                  1.000
Method:                 Least Squares   F-statistic:                 3.002e+34
Date:                Sat, 20 Dec 2025   Prob (F-statistic):               0.00
Time:                        00:24:24   Log-Likelihood:             5.1341e+06
No. Observations:              181026   AIC:                        -1.027e+07
Df Residuals:                  181023   BIC:                        -1.027e+07
Df Model:                           2                                         
Covariance Type:            nonrobust                                         
================================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
--------------------------------------------------------------------------------
Intercept    -3.617e-15   3.75e-16     -9.655      0.000   -4.35e-15   -2.88e-15
retail_price     1.0000   2.21e-17   4.53e+16      0.000       1.000       1.000
cost          9.236e-16   4.77e-17     19.345      0.000     8.3e-16    1.02e-15
==============================================================================
Omnibus:                   179421.631   Durbin-Watson:                   1.178
Prob(Omnibus):                  0.000   Jarque-Bera (JB):         13824323.079
Skew:                          -4.786   Prob(JB):                         0.00
Kurtosis:                      44.727   Cond. No.                         136.
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

=== ํ•ด์„ ===
Rยฒ: 1.0000 (๋ชจ๋ธ์ด 100.0%์˜ ๋ถ„์‚ฐ ์„ค๋ช…)

๊ณ„์ˆ˜:
- ์ •๊ฐ€ $1 ์ฆ๊ฐ€ โ†’ ํŒ๋งค๊ฐ€ $1.0000 ์ฆ๊ฐ€
- ์›๊ฐ€ $1 ์ฆ๊ฐ€ โ†’ ํŒ๋งค๊ฐ€ $0.0000 ์ฆ๊ฐ€
- retail_price: p=0.0000 (์œ ์˜ํ•จ)
- cost: p=0.0000 (์œ ์˜ํ•จ)

๋‹ค์Œ ๋‹จ๊ณ„

A/B ํ…Œ์ŠคํŠธ์—์„œ ์‹คํ—˜์„ ํ†ตํ•œ ์ธ๊ณผ๊ด€๊ณ„ ๊ฒ€์ฆ์„ ๋ฐฐ์›Œ๋ณด์„ธ์š”.

Last updated on

๐Ÿค–AI Mock InterviewPractice with real questions