[패스트캠퍼스 수강 후기] 데이터전처리 100% 환급 챌린지 20회차 미션 Programming/Python2020. 11. 21. 11:44
[파이썬을 활용한 데이터 전처리 Level UP- 20 회차 미션 시작]
* 복습
- 홈페이지 분석을 위한 데이터 불러오기, 검정 방법, p-value 값에 대한 해석에 대해서 알아보았다.
[02. Part 2) Ch 13. 직접 해봐야 내것이 된다. - 02. 고객 세분화를 통한 마케팅 전략 수립 (실습)]
// 데이터 분할
// 각각의 Quantity 에서 음수를 구분해야 한다.
// 환불 데이터와, 주문 데이터를 각각 구분한다.
// 고객별 특징 추출
// 클러스터링을 위해서 데이터 초기화를 해야 한다.
// unique( ) 을 통해서 dataframe 을 만들어 준다.
// 주문 횟수 계산 및 부착을 한다.
// value_counts( ) 를 통해서.. 한 주문에서 여러개의 상품을 구매하기 때문에 CustomerID, InvoiceNo 로 분류 해준다.
// 시리즈로 만들어진 데이터를 to_dict( ) 로 바꾸어 준다. key 사전 id. value 주문횟수
// 주문 횟수가 0인 경우에는 replace 가 되지 않아 Customer ID 가 부착될 수 있다.
// 이러한 경우를 대비하기 위해서 0으로 변경한다.
// 반품 횟수에 대서 계산 및 부착
// 위와 동일 한 방법으로 주문횟수와 반품 횟수로 변경해준다.
// 주문량 계산 및 부착을 해준다.
// 주문 금액 합계 계산 및 부착
// Quantity 와 UnitPrice 로 주문금액을 만들어준다.
// 이 상태에서 최근 주문과 현재 시점까지의 거리를 부착해준다.
// to_datetime( ) 찾아보기
// pandas.to_datetime Documentation
pandas.pydata.org/pandas-docs/stable/reference/api/pandas.to_datetime.html
pandas.to_datetime(arg: DatetimeScalar, errors: str = '...', dayfirst: bool = '...', yearfirst: bool = '...', utc: Optional[bool] = '...', format: Optional[str] = '...', exact: bool = '...', unit: Optional[str] = '...', infer_datetime_format: bool = '...', origin='...', cache: bool = '...') → Union[DatetimeScalar, ‘NaTType’]
pandas.to_datetime(arg: ‘Series’, errors: str = '...', dayfirst: bool = '...', yearfirst: bool = '...', utc: Optional[bool] = '...', format: Optional[str] = '...', exact: bool = '...', unit: Optional[str] = '...', infer_datetime_format: bool = '...', origin='...', cache: bool = '...') → ’Series’
pandas.to_datetime(arg: Union[List, Tuple], errors: str = '...', dayfirst: bool = '...', yearfirst: bool = '...', utc: Optional[bool] = '...', format: Optional[str] = '...', exact: bool = '...', unit: Optional[str] = '...', infer_datetime_format: bool = '...', origin='...', cache: bool = '...') → DatetimeIndex
Convert argument to datetime.
Parameters
argint, float, str, datetime, list, tuple, 1-d array, Series, DataFrame/dict-like
The object to convert to a datetime.
errors{‘ignore’, ‘raise’, ‘coerce’}, default ‘raise’
-
If ‘raise’, then invalid parsing will raise an exception.
-
If ‘coerce’, then invalid parsing will be set as NaT.
-
If ‘ignore’, then invalid parsing will return the input.
dayfirstbool, default False
Specify a date parse order if arg is str or its list-likes. If True, parses dates with the day first, eg 10/11/12 is parsed as 2012-11-10. Warning: dayfirst=True is not strict, but will prefer to parse with day first (this is a known bug, based on dateutil behavior).
yearfirstbool, default False
Specify a date parse order if arg is str or its list-likes.
-
If True parses dates with the year first, eg 10/11/12 is parsed as 2010-11-12.
-
If both dayfirst and yearfirst are True, yearfirst is preceded (same as dateutil).
Warning: yearfirst=True is not strict, but will prefer to parse with year first (this is a known bug, based on dateutil behavior).
utcbool, default None
Return UTC DatetimeIndex if True (converting any tz-aware datetime.datetime objects as well).
formatstr, default None
The strftime to parse time, eg “%d/%m/%Y”, note that “%f” will parse all the way up to nanoseconds. See strftime documentation for more information on choices: https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior.
exactbool, True by default
Behaves as: - If True, require an exact format match. - If False, allow the format to match anywhere in the target string.
unitstr, default ‘ns’
The unit of the arg (D,s,ms,us,ns) denote the unit, which is an integer or float number. This will be based off the origin. Example, with unit=’ms’ and origin=’unix’ (the default), this would calculate the number of milliseconds to the unix epoch start.
infer_datetime_formatbool, default False
If True and no format is given, attempt to infer the format of the datetime strings based on the first non-NaN element, and if it can be inferred, switch to a faster method of parsing them. In some cases this can increase the parsing speed by ~5-10x.
originscalar, default ‘unix’
Define the reference date. The numeric values would be parsed as number of units (defined by unit) since this reference date.
-
If ‘unix’ (or POSIX) time; origin is set to 1970-01-01.
-
If ‘julian’, unit must be ‘D’, and origin is set to beginning of Julian Calendar. Julian day number 0 is assigned to the day starting at noon on January 1, 4713 BC.
-
If Timestamp convertible, origin is set to Timestamp identified by origin.
cachebool, default True
If True, use a cache of unique, converted dates to apply the datetime conversion. May produce significant speed-up when parsing duplicate date strings, especially ones with timezone offsets. The cache is only used when there are at least 50 values. The presence of out-of-bounds values will render the cache unusable and may slow down parsing.
New in version 0.23.0.
Changed in version 0.25.0: - changed default value from False to True.
Returns
datetime
If parsing succeeded. Return type depends on input:
-
list-like: DatetimeIndex
-
Series: Series of datetime64 dtype
-
scalar: Timestamp
In case when it is not possible to return designated types (e.g. when any element of input is before Timestamp.min or after Timestamp.max) return will have datetime.datetime type (or corresponding array/Series).
// recency 로 날짜를 처리한다.
// 하나의 element를 처리 한다는 것이다.
// keep = last 를 통해서, 계산량을 감소 시키는 것이다.
// keep 을 last 로 두는 이유는 맨 마지막 값을 두기 위한 것이다.
// CustomerID, Invoice 데이터를 가지고 오고.. 이건 최근성 이라는 column에 넣어준다.
// 각각의 스케일이 틀리기 때문에 유클리디안 거리등을 사용하기는 어렵다.
// 고객의 주문 특성에 따라서 군집화를 수행하다.
// 군집화 모델을 인스터스화 하고 학습을 시켜준다.
// 각각의 데이터를 보고 확인해 본다.
// 주요 상품에 대해서 확인을 해본다.
// TransactionEncdoer 를 통해서 나타내본다.
// 희소한지를 알아봐야 한다.
// 여기서 모든 것을 사용하는 것은 아니고 빈도가 100회 이상 나온 품목만 사용하면 된다.
// 차원을 줄여서 확인을 해 봐야 한다.
[02. Part 2) Ch 13. 직접 해봐야 내것이 된다. - 03. 이탈 고객의 고객 여정 탐색하기]
* 문제상황
- 고객 로그 데이터를 바탕으로 이탈한 고객과 이탈하지 않은 고객이 보이는 주요 행동 패턴을 탐색하자!
(1) 이탈 고객과 비이탈 고객 분리
(2) 이탈 고객과 비이탈 고객 데이터 내 주요 행동 패턴 추출
(3) 주요 행동 패턴의 등장 비율 비교
* 실습
// sort_values 를 통해서 고객ID, 날짜로 가져오고
// 행동을 unique 상태로 확인하고
// 다른 행동이 있을 수 있기 때문에 ~ not( churn_ID 에 속하지 않는 ID 를 찾아 본다.)
// isin 함수를 통해서 확인
// 이탈이든 아니든 고객ID 의 행동에 따라서 array 형태로 나타낸다.
// 비말 패턴 탐색에서 사용했던 함수들을 가지고 와서 빈말 패턴을 찾아 본다.
[03. Part 3) Ch 14. 이건 꼭 알아야 해 - 지도 학습 모델의 핵심 개념 - 01. 지도학습 개요]
// 기초적인 내용은 생략되어 있다.~
* 지도 학습
- 컴퓨터에게 입력과 출력을 주고, 입력과 출력 간 관계를 학습하여 새로운 입력에 대해 적절한 출력을 내도록 하는 기계학습의 한 분야
- 입력을 특징(feature) 혹은 특징 벡터 (featur vector)라고 하며, 출력을 라벨 (label)이라고 함
// 특징과 라벨간의 관계를 학습하는 거라고 보면 된다.
- 라벨이 범주형 변수면 분류라고 하며, 연속형 변수면 예측 혹은 회귀라고 한다.
* 과적합
- 지도학습 모델은 학습 데이터를 분류하고 예측하는 수준으로, 학습에 사용되지 않은 데이터도 정확히 분류하고 예측하리라 기대하며, 이러한 기대가 충족되는 경우 일반화 되었다고 한다.
- 모델이 너무 족잡해서 학습 데이터에 대해서만 정확히 분류하고 예측하는 모델을 과적합되었다고 하며, 반대로 너무 단순해서 어떠한 데이터에 대해서도 부적합한 모델을 과소적합되었다고 한다.
// 적정적합은 오차가 조금씩 있고, 과적합은 오차가 전혀 없는 상태로 본다.
// 적정적합은 학습 데이터를 사용해서 학습을 했을 것이고.. 과적합은 너무 복잡하게 되어 있어서 데이터에 대해서만 과하게 적합이라고 보면 된다.
- 과적합과 과소적합에 영향을 끼치는 주요 인자로는 모델의 복잡도, 샘플 수, 차원의 크기 등이 있다.
// 샘플수는 이 모델을 지지하는 근거하는.. 수라고 보면 된다.
// 적으면 성급한 일반화가 되어 버릴 수가 있다.
* 데이터 분할
- 과적합된 모델을 좋게 평가하는 것을 방지하기 위해서, 데이터를 학습 데이터와 평가 데이터로 분할한다.
// 객관적인 결과를 위해서 평가 데이터를 모르게 해야 한다.
- 학습 데이터와 평가 데이터가 지나치게 유사하거나 특정 패턴을 갖지 않도록 분할 해야 한다.
* 파라미터와 하이퍼 파라미터
- 하이퍼 파라미터(hyper parameter)는 일종의 사용자 옵션으로, 모델 성능에 직접적으로 영향을 끼치므로 자세한 데이터 탐색 결과를 바탕으로 선택해야 한다.
// 파라미터는 신경을 많이 쓰지 않는다고 보면 된다.
// 머신러닝에서 무조건 좋다는 것은 없다고 보면 된다. 경험으로 이것이 좀 더 나아 보인다고 생각하면 된다.
* 이진 분류 모델 평가 : 혼동 행렬
- 이진 분류 : 클래스 변수의 상태 공간이 크기가 2인 분류
// 상태 공간은 값의 갯수로 보면 된다.
- 혼동 행렬 : 분류 모델을 평가하는데 사용하는 표
. Positive class : 분석의 관심 대상 (보통 1로 설정)
. Negativ class : 분석 관심 대상 외 (보통 0이나 -1로 설정)
* 이진 분류 모델 평가 : 대표적인 지표
- 각 지표의 한계 때문에, 가능한 여러 지표를 사용하여 모델을 평가해야 한다.
// 정확도 가 가장 많이 쓰이고, 공정하고
// F1 은 정확도랑 전혀 관계가 없다고 생각해야 한다.
* 다중 분류 모델 평가
- 다중 분류 : 클래스 변수의 상태 공간이 크기가 3이상인 분류
- 각 클래스를 긍정으로 간주하여 평가 지표를 계산한 뒤, 이들의 산술 평균이나 가중 평균으로 평가
// 산술 평균 marco average
// 가중 평균 weight average
* 예측 모델 평가
- 대표적인 예측 모델 평가 지표로 루트 평균 제곱 오차 (root mean squared erro ; RMSE) 와 평균 절대 오차 (mean absolute error ; MAE) 가 있으며, 두 지표 모두 값이 작을 수록 좋음
- RMSE 와 MAE를 정확히 평가하려면, 해당 분야의 도메인 지식이나 클래스 변수의 스케일을 고려해야 한다.
. 예를 들어, 코스피 지수를 예측하는 모델의 MAE 가 1010 이라면 무의미한 수준의 모델이지만, 전세계 인구 수를 예측하는 모델의 MAE 가 1010 이라면 매우 우수한 모델이다.
[파이썬을 활용한 데이터 전처리 Level UP-Comment]
- 고객 데이터 활용 실습을 해보았고, 고객 이탈 여정에 대해서 간략하게 다른 주제로 살펴 볼 수 있었다. 지도 학습에 대한 주요 개념들을 배웠다.
'Programming > Python' 카테고리의 다른 글
[패스트캠퍼스 수강 후기] 데이터전처리 100% 환급 챌린지 22회차 미션 (0) | 2020.11.23 |
---|---|
[패스트캠퍼스 수강 후기] 데이터전처리 100% 환급 챌린지 21회차 미션 (0) | 2020.11.22 |
[패스트캠퍼스 수강 후기] 데이터전처리 100% 환급 챌린지 19회차 미션 (0) | 2020.11.20 |
[패스트캠퍼스 수강 후기] 데이터전처리 100% 환급 챌린지 18회차 미션 (0) | 2020.11.19 |
[패스트캠퍼스 수강 후기] 데이터전처리 100% 환급 챌린지 17회차 미션 (0) | 2020.11.18 |