쇼핑몰 지점별 매출액 예측 AI.pdf
1.74MB
Untitled-1.ipynb
1.93MB

'프로그래밍 > 프로젝트' 카테고리의 다른 글

자기상관분석  (0) 2024.05.21
시계열 데이터의 정상성  (0) 2024.05.21
ARIMA 모델 검증 및 예측 정확도 평가  (0) 2024.05.21
ARIMA 모델  (0) 2024.05.21
데이콘 - 고객 대출 등급 분류 프로젝트  (1) 2024.02.09

 ACF(자기상관 함수 - 왼쪽) 플롯은 시계열 데이터의 현재 값과 과거 값 사이의 상관 관계를 시간 지연에 따라 보여준다.

PACF(부분 자기상관 함수 - 오른쪽)플롯은 시간 지연 간의 상관 관계를 보여준다. 이는 다른 지연의 영향을 배제한 후의 상관 관계를 나타낸다. 

 

 

ACF 그래프는 라그(lag) 증가함에 따라 상관계수가 천천히 감소하는 패턴을 보여준다.

일반적으로 이런 패턴은 데이터에 계절성이나 추세와 같은 비정상적인 성분이 포함되어 있을 수 있음을 나타낸다.

그러나 이 경우, ADF 테스트를 통해 데이터가 정상 시계열임을 확인했기에 ACF 그래프에서 나타나는 느린 감소나 주기적 패턴에도 불구하고, 우리는 이 데이터를 정상적인 시계열로 간주하고 ARIMA 모델링에 사용할 것이다.

이로 인해 비정상 시계열로 보일 수 있는 신호가 있더라도, 이미 검증된 데이터의 정상성을 신뢰하고 해당 데이터로 모델링을 진행할 것이다. 

 

 

PACF 그래프에서 신뢰구간 안으로 처음으로 들어가는 라그(lag)는 인덱스 9번이다. 

이는 해당 지점까지의 부분 자기상관계수는 통계적으로 유의미하다고 해석할 수 있으며, 이는 ARIMA 모델에서 자기회귀(AR)부분의 p 매개변수를 결정할 때의 정보를 제공한다.

첫 번째 라그 이후 상관계수가 점차 감소하는 것은 이전 시점의 데이터가 현재값에 영향을 미칠 수 있음을 나타내지만, 9번째 라그 이후에는 이러한 영향이 통계적으로 유의하지 않게 되어 추가적인 AR 구성 요소가 필요하지 않을 수 있음을 의미한다. 

이 정보를 기반으로, ARIMA 모델링 시 p를 최대 8로 설정할 수 있으며, 이는 시계열 데이터의 현재값이 과거 8개의 시점에 영향을 받을 수 있다는 가정 하에 모델을 구축하는 것이다. 

이후 모델 선택 과정에서 AIC와 같은 정보 기준을 통해 더 낮은 p값이 더 적합한 모델을 제공하는지 평가할 수 있다. 

 

정상성

시계열 데이터의 통계적 속성이 시간에 따라 변하지 않음을 의미하는데, 데이터의 평균과 분산이 일정함을 의미한다.

 

adfuller() 함수를 통해 시계열 데이터의 정상성을 검증하기 위한 Augmented Dicker-Fuller 테스트를 수행한다.

from statsmodels.tsa.stattools import adfuller

# ADF 테스트
adf_result = adfuller(train_data['평균기온'])
print(f'ADF 통계값: {adf_result[0]}')
print(f'p-value: {adf_result[1]}')

 

ADF 테스트

ADF 테스트는 '단위근'이라는 특정 유형의 비정상성을 확인한다.

 

이 테스트에서 계산되는 ADF 통계치는 데이터에 단위근이 없다는 대립 가설에 대한 증거를 제공한다.

 

p - value는 이 통계치가 얼마나 유의미한지를 나타낸다. 

일반적으로 p-value가 0.05 이하일 경우, 우리는 데이터가 정상성을 가지고 있다고 간주하고 귀무 가설을 기각할 수 있다.

 

 

예를 들어

만약 코드 실행 결과, ADF 통계값은 -2.904, p-value는 0.044로 나타났을 경우, 일반적으로 p-value가 0.05 이하일 경우에는 귀무가설을 기각하고 데이터가 정상성을 가진다고 할 수 있지만...

이 경우에는 p-value가 0.05에 근접하여 데이터가 정상 시계열이라고 결론짓기에는 약간의 불확실성이 남는다.

 

따라서 이 경우, 차분을 수행하여 정상성을 확인하거나 모델의 성능을 검증하여 평가할 수 있다. 

 

혹은 p와 q의 범위 내에서 여러 ARIMA 모델을 피팅하고 각 모델의 AIC(Akaike Information Criterion) 값을 비교함으로써 최적의 파라미터 조합을 찾는 방법을 사용할 수도 있다.

 

AIC는 모델의 적합도와 복잡도를 동시에 고려하는 척도로, 낮은 AIC 값을 가지는 모델이 주어진 데이터에 대해 더 좋은 예측 성능을 제공할 가능성이 높다. 

'프로그래밍 > 프로젝트' 카테고리의 다른 글

쇼핑몰 지점별 매출 예측 AI  (0) 2024.08.29
자기상관분석  (0) 2024.05.21
ARIMA 모델 검증 및 예측 정확도 평가  (0) 2024.05.21
ARIMA 모델  (0) 2024.05.21
데이콘 - 고객 대출 등급 분류 프로젝트  (1) 2024.02.09

평균 절대 오차 (Mean Absolute Error, MAE)

 

MAE는 회귀 문제에서 모델의 정확도를 평가하는데 사용되는 방법 중 하나이다.

 

MAE는 실제값과 예측값 간의 차이의 절대값의 평균을 의미한다. 

이는 모델의 예측이 얼마나 정확한지를 나타내는 지표로, 값이 낮을수록 더 정확한 예측을 의미한다. 

 

장점

  • 모든 오차의 절대값을 평균을 계산하므로, 예측하고자 하는 단위가 동일하다. (예: MAE가 5라면 모델이 평균적으로 실제값과 5정도 차이남을 나타낸다.)
  • 다른 평가 지표에 비해 이상치에 덜 민감하다.

 

단점

  • 모든 오차를 동일하게 취급하므로, 특정 오차에 가중치를 주고싶을 경우 부적절한 평가방법일 수 있다.

 

'프로그래밍 > 프로젝트' 카테고리의 다른 글

자기상관분석  (0) 2024.05.21
시계열 데이터의 정상성  (0) 2024.05.21
ARIMA 모델  (0) 2024.05.21
데이콘 - 고객 대출 등급 분류 프로젝트  (1) 2024.02.09
고객 유지를 위한 필요한 행동 예측  (1) 2024.01.14

ARIMA 

- 자기회귀 누적 이동 평균 (Autoregressive Integrated Moving Average)의 약자

- 시계열 데이터의 과거 값과 오류를 사용하여 미래 값을 예측

- 이 모델은 자기회귀(AR), 차분(I), 이동평균(MA) 세 가지의 구성 요소로 이루어져 있음.

 

자기회귀(AR)

'자기회귀'는 과거의 값들이 미래 값에 어떤 영향을 미치는지를 설명한다.

예를 들어, 지난 주의 판매량이 이번 주의 판매량에 영향을 미치는 경우, 이는 자기 회귀 관계에 해당한다.

AR 부분에서는 'p'라는 파라미터를 사용하는데, 이는 과거 데이터 포인트 중 얼마나 많은 것을 고려할 것인지를 결정한다.

 

차분(I)

'차분'은 비정상적인 시계열 데이터를 정상적인 상태로 만들기 위해 사용된다.

비정상 시계열은 평균, 분산 등이 시간에 따라 변하는 특성을 가진다.

차분은 이러한 데이터의 추세나 계절성을 제거하여 시간에 따라 일정한 수준을 유지하도록 한다.

 

이동평균(MA)

'이동평균' 부분은 과거 예측 오차가 미래 값에 어떻게 영향을 미치는지를 나타낸다. 

MA에서는 'q'라는 파라미터를 사용하여 과거 예측 오차 중 몇 개를 고려할 것인지를 결정한다. 

model = ARIMA(train_data['평균기온'], order = (4, 3, 2))

 

위 코드는 ARIMA 모델을 초기화한다. 

여기서 train_data['평균기온']은 모델에 사용할 시계열 데이터이다.

order = (4, 3, 2)는 ARIMA 모델의 세 가지 주요 파라미터를 설정한다.

4, 3, 2는 각각 p,q,d를 의미하며

p는 자기회귀 부분의 차수, d는 차분의 차수, q는 이동평균 부분의 차수를 의미한다. 

 

 

시계열 데이터의 summary()

1. Log Likelihood

: 모델이 데이터를 얼마나 잘 적합하는지를 나타내는 지표, 이 값이 클수록 모델이 데이터를 더 잘 설명한다는 뜻 

 

2. AIC / BIC

: 모델의 적합도를 평가하고 모델 간 비교를 할 때 사용되는 지표이다. 낮은 값일 수록 모델의 적합성이 더 높음을 의미.

 

3. coef

: 이 계수는 AR과 MA 파라미터의 영향력을 나타낸다.

: 예를 들어, 하나의 계수가 3.21이라면, 계수가 양수이고 따라서 그것의 지연(lag) 값은 현재 값에 긍정적인 영향을 미친다는 뜻이다. 즉, 과거의 값이 높으면 현재 값도 높을 것으로 예상된다는 뜻이다.

 

4. P > |z|

: 각 계수의 통계적 유의미함을 나타내는 p-값입니다. 일반적으로 이 값이 낮으면 (예: 0.05 이하), 해당 계수가 통계적으로 유의미하다고 할 수 있다. 

 

5. Ljung-Box / Jarque-Bear / Heteroskedasticity(이분산성)

: 이 테스트들은 각각 잔차가 무작위 노이즈인지, 정규분포를 따르는지, 등분산성을 가지는지 평가한다.

 

6. Prob(Q, JB, H)

: p-값들이 낮다면(0.05 또는 0.01이하), 잔차가 무작위 노이즈의 특성을 가지며, 정규분포를 따르고, 시차에 따라 일정한 분산을 가진다고 볼 수 있다. 

 

한글폰트 적용 - 코랩

!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf

 

Fixed Random Seed 

seed 값에 의해 동일한 코드를 사용해도 결과가 다를 수 있기에, 동일한 결과를 위해 seed값을 고정시킵니다.

import numpy as np
import random
import os

def seed_everything(seed):
    random.seed(seed)
    os.environ['PYTHONHASHSEED'] = str(seed)
    np.random.seed(seed)

seed_everything(42) # Seed 고정

 

데이터 불러오기 및 확인 

import pandas as pd

train_df = pd.read_csv('/content/sample_data/train.csv')
test_df = pd.read_csv('/content/sample_data/test.csv')

display(train_df.head(3))
display(test_df.head(3))

 

 

EDA

범주형 변수 확인

# 시각화 패키지 불러오기
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

# 한글 폰트 설정하기
fe = fm.FontEntry(fname = 'MaruBuri-Regular.otf', name = 'MaruBuri')
fm.fontManager.ttflist.insert(0, fe)
plt.rc('font', family='NanumBarunGothic')

fig, axes = plt.subplots(2, 2, figsize=(25,10)) # 2x2 형식으로 4개 그래프 동시에 표시

sns.countplot(x = train_df['대출기간'], ax=axes[0][0]).set_title('대출기간')
sns.countplot(x = train_df['근로기간'], ax=axes[0][1]).set_title('근로기간')
sns.countplot(x = train_df['주택소유상태'], ax=axes[1][0]).set_title('주택소유상태')
sns.countplot(x = train_df['대출목적'], ax=axes[1][1]).set_title('대출목적')

plt.show()

 

근로기간에서 < 1 year이랑 <1 year이 있는걸 확인했습니다.

둘 다 똑같은 의미를 취하는 것이기에 같게 만들어주는 작업이 필요할 듯 합니다.

그런데 근로기간의 데이터를 다시 한번 살펴보니 year에 3이 들어가있는걸 확인했고 10+ year, 1year도 중복이 되기에 마찬가지로 바꿔줍니다.

 

fig, axes = plt.subplots(2, 2, figsize=(25,10)) # 2x2 형식으로 4개 그래프 동시에 표시

sns.countplot(x = train_df['대출기간'], ax=axes[0][0]).set_title('대출기간')
sns.countplot(x = train_df['근로기간'], ax=axes[0][1]).set_title('근로기간')
sns.countplot(x = train_df['주택소유상태'], ax=axes[1][0]).set_title('주택소유상태')
sns.countplot(x = train_df['대출목적'], ax=axes[1][1]).set_title('대출목적')

plt.show()

 

다시 확인해주면 잘 처리된걸 확인할 수 있습니다.

 

세분화된 변수형 찾기

# '범주형 변수 찾기'
numeric_columns = train_df.select_dtypes(include=['number'])
categorical_col_names = train_df.select_dtypes(include=['object']).columns.tolist()

# '범주형 변수 정보 확인하기'
summary = {}
unique_counts = {}
for col in categorical_col_names:
    summary[col] = train_df[col].value_counts().to_dict()
    unique_counts[col] = train_df[col].nunique()

print(unique_counts)

 

범주형 변수의 경우 범주가 너무 세분화되어 있을 경우, One-Hot Encoding시 차원의 저주에 빠지기 쉽습니다. 따라서 너무 세분화된 범주형 변수를 제거해주기로 결정합니다.

따라서 ID를 제거해줍니다.

 

 

EDA: 수치형 변수 확인하기

결측치 확인

numeric_columns_train = train_df.select_dtypes(include=['number'])
numeric_columns_test = test_df.select_dtypes(include=['number'])

null_tot_train = numeric_columns_train.isnull().sum()
null_tot_test = numeric_columns_test.isnull().sum()

print(null_tot_train)
print(null_tot_test)

 

Describe & info

numeric_columns_train.describe()

부채_대비_소득_비율: max가 9999인게 조금 이상합니다.

총계좌수: max가 169인게 이상합니다. 

최근_2년간_연체_횟수: max가 30번인게 이상합니다.

연간소득: 0인데 대출이 가능했는지 의문이 듭니다. 

min_income = train_df['연간소득'].min()
rows_with_min_income = train_df[train_df['연간소득'] == min_income]
rows_with_min_income

부채_대비_소득_비율의 값이 9999인 것과 연간소득 0인데이터가 중복되는걸 확인할 수 있습니다.

 

이 데이터는 모델을 학습시킬 때 좋지 않다고 판단하여 제거하기로 결정했습니다.

수치형 변수 시각화

# 수치형 변수들을 시각화 (예: 히스토그램)
numeric_columns_train.hist(bins=10, figsize=(10, 6))
plt.suptitle('Numeric Variables Distribution')
plt.show()

 

대출금액을 제외하고 대부분의 데이터들이 좌측편향돼있다는 걸 확인할 수 있습니다.

이걸 로그변환시킬지 아니면 이상치의 값들을 제거해야할지 결정을 해줘야할 듯합니다.

그러나 저는 로그변환을 시도한 데이터가 좋지 않은 예측값을 냈기에 이상치의 값들을 일부분 제거하여 모델을 학습시키는게 좋을 듯 합니다. 

데이터 전처리 1: 학습 및 추론 데이터 설정

제출을 위한 코드와 제가 확인할 코드를 나눠서 진행하였습니다.

from sklearn.model_selection import train_test_split

X = train_df.drop(columns=['ID', '근로기간','대출등급'])
y = train_df['대출등급']
train_x = train_df.drop(columns=['ID', '근로기간', '대출등급'])
train_y = train_df['대출등급']

test_x = test_df.drop(columns=['ID', '근로기간'])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y, random_state=42)

데이터 전처리 2: 범주형 변수 수치화

LabelEncoder를 통해 범주형 변수 수치화를 진행합니다.

from sklearn.preprocessing import LabelEncoder

categorical_features = ['대출기간', '주택소유상태', '대출목적']

for i in categorical_features:
    le = LabelEncoder()
    le=le.fit(train_x[i])
    le=le.fit(X[i])

    train_x[i]=le.transform(train_x[i])
    X[i]=le.transform(X[i])

    for case in np.unique(test_x[i]):
        if case not in le.classes_:
            le.classes_ = np.append(le.classes_, case)
    test_x[i]=le.transform(test_x[i])

display(train_x.head(3))
display(test_x.head(3))

 

 

모델 선정 및 학습

RandomForestClassifier

from sklearn.ensemble import RandomForestClassifier

RFC = RandomForestClassifier()
RFC.fit(X_train, y_train)
max_depth_list = range(20,25)
accuracy = []

for m in max_depth_list:
    RFC = RandomForestClassifier(random_state = 42, max_depth = m)
    RFC.fit(X_train, y_train)
    pred = RFC.predict(X_test)
    score = accuracy_score(pred, y_test)
    accuracy.append(score)

plt.plot(max_depth_list, accuracy)
plt.xlabel('max_depth')
plt.ylabel('accuracy')
plt.show()

최적의 깊이를 찾기위한 코드

from sklearn.metrics import accuracy_score

pred = RFC.predict(X_test)
score = accuracy_score(pred, y_test)
print(f"정확도: {score}")

가장 잘 나온 max_depth의 값을 선택하여 예측한 결과 정확도는 0.8231이 나왔습니다.

 

DecisionTreeClassifier

DT = DecisionTreeClassifier(random_state = 42, criterion = 'entropy', max_depth = 5)
DT.fit(X_train, y_train)
max_depth_list = range(1,101)
accuracy = []

for m in max_depth_list:
    DT = DecisionTreeClassifier(random_state = 42, criterion = 'entropy', max_depth = m)
    DT.fit(X_train, y_train)
    pred = DT.predict(X_test)
    score = accuracy_score(pred, y_test)
    accuracy.append(score)

plt.plot(max_depth_list, accuracy)
plt.xlabel('max_depth')
plt.ylabel('accuracy')
plt.show()

가장 최적의 max_depth

DT = DecisionTreeClassifier(random_state = 42, criterion = 'entropy', max_depth = 19)
DT.fit(train_x, train_y)

 

가장 잘 나온 max_depth로 학습시켜줍니다.

 

KNeighborsClassifier

n_neighbors_list = range(1,10)
accuracy = []

for m in n_neighbors_list:
    KNN = KNeighborsClassifier(n_neighbors = m)
    KNN.fit(X_train, y_train)
    pred = KNN.predict(X_test)
    score = accuracy_score(pred, y_test)
    accuracy.append(score)

plt.plot(n_neighbors_list, accuracy)
plt.xlabel('n_neighors')
plt.ylabel('accuracy')
plt.show()

정확도가 앞서 실행한 두 모델에 비해 현저하게 낮기에 이 모델은 채택안하기로 결정합니다.

 

그래서 예측을 수행하여 데이콘 대회에 제출한 결과

0.79의 정확도를 얻었습니다.

처음으로 대회에 참여하여서 이정도면 나쁘지 않은 결과라고 생각합니다. 

앞으로 더욱 정진하겠습니다!

'프로그래밍 > 프로젝트' 카테고리의 다른 글

ARIMA 모델 검증 및 예측 정확도 평가  (0) 2024.05.21
ARIMA 모델  (0) 2024.05.21
고객 유지를 위한 필요한 행동 예측  (1) 2024.01.14
원본 데이터 보존  (0) 2023.11.28
머신러닝 기초 및 순서  (0) 2023.11.21

코칭스터디 2024

1. 데이터 구성

  • Kaggle 데이터셋( https://www.kaggle.com/blastchar/telco-customer-churn )은 통신사 고객 이탈(Churn)에 대한 정보
  • IBM에서 제공했으며 고객 데이터를 분석하여 고객 유지 프로그램을 개발하는 데 도움이 됨.
    • 고객 인구 통계 정보(Demographic info): 고객의 성별, 연령대, 배우자 및 부양 가족의 유무(Gender, SeniorCitizen, Partner, Dependents)
    • 고객 이탈(Churn) 정보: 서비스를 중단 여부에 대한 정보
    • 서비스 가입 정보(Services subscribed): 고객들이 가입한 서비스들, 예를 들어 전화, 다중 라인, 인터넷, 온라인 보안, 온라인 백업, 장치 보호, 기술 지원, 스트리밍 TV 및 영화( honeService, MultipleLine, InternetService, OnlineSecurity, OnlineBackup, DeviceProtection, TechSupport, StreamingTV, StreamingMovies) 등에 대한 정보
    • 고객 계정 정보(Customer account info): 고객이 얼마나 오래 서비스를 이용했는지, 계약 유형, 결제 방법, 무페이퍼 청구 여부, 월별 요금, 총 요금 (CustomerID, Contract, PaperlessBilling, PaymentMethod, MonthlyCharges, TotalCharges, Tenure)등의 정보

 

2. 필요한 라이브러리로드

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

3. 데이터셋 로드

df = pd.read_csv("https://bit.ly/telco-csv", index_col="customerID")
df.shape
df.head() # 데이터 확인
df.info() # 데이터 집합과 각 열들의 자료형 확인
# df.isnull().sum()는 컬럼별로 결측치의 합계를 구합니다.
print(df.isnull().sum())
# df.isnull().sum().sum() 전체 결측치의 합계를 구합니다.
df.isnull().sum().sum()

4. 학습, 예측 데이터셋 나누기

5. 학습, 예측에 사용할 컬럼 

# 학습, 예측에 사용할 컬럼에 이름을 지정
# 범주형 데이터 (object, category)는 전처리가 따로 필요
# 따라서 수치데이터만을 사용
feature_names = df.select_dtypes(include = "number").columns
feature_names
# train 과 test 로 나누기 위해 데이터를 기준을 정함.
split_count = int(df.shape[0] * 0.8)
split_count

6. 정답값이자 예측해야할 값

label_name = "Churn"
label_name #정답값

7. 학습, 예측 데이터셋 만들기

# 데이터의 80%을 나눌 기준 인덱스(split_count)로 문제 데이터(X)를 train, test로 나눔.
# 데이터의 80%을 나눌 기준 인덱스(split_count)로 정답 데이터(y)를 train, test로 나눔.
train = df[:split_count].copy()
test = df[split_count:].copy()

X_train = train[feature_names]
y_train = train[label_name]

X_test = test[feature_names]
y_test = test[label_name]

X_train.shape, X_test.shape, y_train.shape, y_test.shape

8. 머신러닝 알고리즘 가져오기

DecisionTreeClassifier(
    *,
    criterion='gini', # 분할방법 {"gini", "entropy"}, default="gini"
    splitter='best',
    max_depth=None, # The maximum depth of the tree
    min_samples_split=2, # The minimum number of samples required to split an internal node
    min_samples_leaf=1, # The minimum number of samples required to be at a leaf node.
    min_weight_fraction_leaf=0.0, # The minimum weighted fraction of the sum total of weights
    max_features=None, # The number of features to consider when looking for the best split
    random_state=None,
    max_leaf_nodes=None,
    min_impurity_decrease=0.0,
    class_weight=None,
    ccp_alpha=0.0,
)
  • 주요 파라미터
    • criterion: 가지의 분할의 품질을 측정하는 기능
    • max_depth: 트리의 최대 깊이
    • min_samples_split:내부 노드를 분할하는 데 필요한 최소 샘플 수
    • min_samples_leaf: 리프 노드에 있어야 하는 최소 샘플 수
    • max_leaf_nodes: 리프 노드 숫자의 제한치
    • random_state: 추정기의 무작위성을 제어. 실행했을 때 같은 결과가 나오도록 함.
from sklearn.tree import DecisionTreeClassifier

model = DecisionTreeClassifier()

9. 학습(훈련)

model.fit(X_train, y_train)

10. 예측

# 데이터를 머신러닝 모델로 예측(predict)
y_predict = model.predict(X_test)
y_predict[:5]

11. 트리 알고리즘 분석하기

from sklearn.tree import plot_tree

plt.figure(figsize=(20, 10))

tree = plot_tree(model,
                 feature_names = feature_names,
                 filled = True,
                 fontsize = 10,
                 max_depth = 4)

12. 정확도 측정하기

# 피처 중요도를 시각화
sns.barplot(x = model.feature_importances_, y=feature_names)
from sklearn.metrics import accuracy_score

accuracy_score(y_test, y_predict)

 

'프로그래밍 > 프로젝트' 카테고리의 다른 글

ARIMA 모델  (0) 2024.05.21
데이콘 - 고객 대출 등급 분류 프로젝트  (1) 2024.02.09
원본 데이터 보존  (0) 2023.11.28
머신러닝 기초 및 순서  (0) 2023.11.21
데이터 프로젝트 (데이터 확인)  (1) 2023.11.01
train = raw_data_train.copy()
test = raw_data_test.copy()
submission = raw_data_submission.copy()

 

원본 데이터를 보존하면서 독립적으로 작업하기 위해 사용

원본 데이터를 직접 수정하는 대신, 복사하여 새로운 데이터프레임을 생성하면 원본 데이터의 무결성 보존 가능

 

copy() 메서드를 사용하여 원본 데이터를 복사하는 방법은 데이터프레임의 독립성을 유지하고,

원본 데이터와의 연관성을 끊을 수 있음.

 

출처 : 데이콘 

train.csv : 모델을 학습하기 위해 사용하는 데이터

test.csv : 모델을 통해 정답을 예측하기 위해 사용하는 데이터

sample_submission.csv : 예측한 정답 값을 기록하여 제출하기 위한 샘플 정답 파일 

 

 

순서 (출처: 데이콘, 영화 관객 수 예측 프로젝트)

1. 데이터 불러오기

2. 데이터 확인

3. 데이터 이해

4. 결측치 이해

5. 결측치 처리 

6. 모델 구조의 이해 

7. 모델링 

 

 

 

1. 데이터 읽어오기

# as 명령어로 pd 별칭 지정하기
import pandas as pd

# train.csv, test.csv, sample_submission.csv 파일을 읽어옵니다.
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
submission = pd.read_csv('sample_submission.csv')

 

2. 데이터 확인하기

# 데이터의 개수, 열 이름, 결측값의 수, 데이터 타입 등을 확인할 수 있습니다. 
train.info()

 

3. Column 열 확인

train.columns()

 

4. 데이터 기술 통계량 확인

train.describe()

 

5. 무작위 샘플데이터 확인하기 

train.sample(10)

 

6. 원하는 열의 평균값 얻기 

mean_target = train['열 이름'].mean()
mean_target

 

7. 데이터 프레임 csv 파일로 저장 후 확인

# to_csv를 통해 폴더에 저장
submission.to_csv('submission.csv', index = False)

'프로그래밍 > 프로젝트' 카테고리의 다른 글

ARIMA 모델  (0) 2024.05.21
데이콘 - 고객 대출 등급 분류 프로젝트  (1) 2024.02.09
고객 유지를 위한 필요한 행동 예측  (1) 2024.01.14
원본 데이터 보존  (0) 2023.11.28
머신러닝 기초 및 순서  (0) 2023.11.21

+ Recent posts