본문 바로가기

AI/Data Analysis, Statistics

Feature Engineering

 

 

Feature Engineering

   : 통계분석, 머신러닝, 딥러닝을 위해 도메인 지식과 창의성을 바탕으로 feature를 재조합하여 새로운 feature를 생성

   ex) bmi 지수

 

    → 데이터에 따라 결과에 영향을 많이 미치기 때문에 시간과 비용이 많이 소요됨

 

<과제>

1. Feature Engineering

     - 각 분기별 영업 이익률 계산

     - PDR 계산

 

1. 데이터 불러오기

   - 데이터 불러온 후 데이터 타입 확인

import pandas as pd

df = pd.read_csv('url.csv')

df.dtypes

 

2. str to int / 영업이익률 계싼

  - 영업이익률 계산을 위해 str을 int로 변환하는 함수를 생성

  - 영업이익, 매출액에 적용하여 영업이익률 구함

#str을 int로 바꾸는 함수
def toint(string):
  return int(string.replace(',', ''))
  
df['영업이익'] = df['영업이익'].apply(toint)
df['매출액'] = df['매출액'].apply(toint)

#영업이익률 계산
df['영업이익률_new'] = df['영업이익'] / df['매출액'] * 100

3. PDR(Price Dream Ratio) 계산

  - PDR = 시가총액 / (TAM * 시장점유율)

  - PDR을 구하는 함수를 생성한 뒤 2018년 kt&g 데이터에 적용

#PDR을 구하는 함수
def pdr(a,b,c):
  print("PDR :", c/(a*b))


#2018년 kt&g PDR
market_share_2018 = 0.62
TAM_2018 = 1500000000
Market_capitalization_2018 = 1318010000

pdr(market_share_2018, TAM_2018, Market_capitalization_2018)

2. String Manipulation

      - replace가 아닌 다른 방법으로 str 데이터 int로 변환

df['매출액'] = df['매출액'].astype(int)

df.iloc[0, 1]

 

3. Apply

     - describe를 통해 summary statistics 확인

     - 결측치 0 처리

 

1. str to int

#str to int
df['영업이익(발표기준)']=df['영업이익(발표기준)'].apply(toint)
df['세전계속사업이익']=df['세전계속사업이익'].apply(toint)
df['당기순이익(지배)']=df['당기순이익(지배)'].apply(toint) .....

2. 결측치 0처리 후 describe

df.isnull()
df = df.fillna(0)

df.describe()

 

<도전 과제>

1. NA Value Handling

     - 19년도 4분기의 당기순이익(비지배) 부분을 NA로 대체

     - 이후 해당 결측치를 mean imptation 방법을 사용하여 처리

#결측값으로 대체
import numpy as np
df.iloc[2, 7] = np.nan  #19년도 4분기 당기순이익

#결측값을 평균 값으로 대체
df = df.fillna(df.mean())

 

2. Feature Engineering

  - Relative Perfomance 라는 새로운 feature를 계산하세요. 이는 최근 1년치 매출액의 평균값을 기준으로

  • 10% 이상 -> S
  • 5% 이상 -> A
  • -5 ~ 5% -> B
  • -5%이하 -> C
  • 10%이하 -> D

1. 매출액 평균 값 구한 후 매출액 점수와 등급 점수 column 생성

   - 더 간단하게 할 수 있는 방법이 있을 것 같긴한뎁,, 우선 매출액의 평균 값을 구한 후

    (매출액 - 평균값) / 평균값 * 100을 하여 등급점수를 생성했다.

#매출액 평균 값
df["매출액"].mean()
> 12550.8

df['등급점수'] = (df['매출액'] - 12550.8) / 12550.8*100

2. 등급 구하기 위한 함수 생성

   - 위에서 구한 등급 점수에 따라 등급을 매긴후 "Relative Perfomance" 컬럼에 데이터를 삽입

def func(df):
  if df['등급점수']  >= 10:
    return 'S' 
  elif df['등급점수'] < 10 and df['등급점수'] >= 5:
    return 'A'
  elif df['등급점수'] < 5 and df['등급점수'] >= -5:
    return 'B'
  elif df['등급점수'] < -5 and df['등급점수'] > -10:
    return 'C'
  else:
    return 'D'
    
#Relative Perfomance 컬럼 추가
df['Relative Perfomance'] = df.apply(func, axis=1)

df[['분기', 'Relative Perfomance']]

'AI > Data Analysis, Statistics' 카테고리의 다른 글

Sprint2_t-test  (0) 2021.01.05
Sprint1_Sprint challenge  (0) 2021.01.05
Section1_Data Visualize  (0) 2021.01.02
Section1_Data Manipulation  (0) 2020.12.31
EDA(Exploratory Data Analysis)  (0) 2020.12.28