[패스트캠퍼스 수강 후기] 데이터전처리 100% 환급 챌린지 19회차 미션 Programming/Python2020. 11. 20. 11:02
[파이썬을 활용한 데이터 전처리 Level UP- 19 회차 미션 시작]
* 복습
- 빈발 패턴, 머신러닝에서의 활용, 어떤식을 구성을하면 소비자들이 더 머물고, 다른 전환율이 많이 발생할지에 대해서 알아보았다.
[02. Part 2) Ch 13. 직접 해봐야 내것이 된다. - 01. A-B 테스트 - 홈페이지 화면을 어떻게 구성할 것인가 - (실습 - Step 1 ~ 2)]
// %matplotlib inline 그래프 그리기 위한
// plt.rcParams 를 통해서 각각의 옵션을 정해서 나타낸다.
// 1년치 데이터라서 위치를 찾기 어렵기 때문에
// 월별 일 수 누적을 통한 매월 1일 인덱스 정의 (12월 제외) 했다.
// xtick_range = np.cumsum 을 통해서 확인함.
// 변동 자체는 그렇게 확 띄거나 변동성이 많이 없는 것 같다.
Step 2. 상품 배치와 상품 구매 금액에 따른 관계 분석
// index_col 을 사용해서 불러올때 부터 고객 ID 로 index 를 설정하는 것이다.
// 이런식으로 placement_A, placement_B, placement_C
// 원래는 같은 고객을 불러 오는 것이 더 좋을 수도 있다.
// 정확한 테스트를 위해서는 고객 ID 가 일치하는 것이 더 좋다.
// 현실적으로는 다른 고객들을 불러 온다.
// 구매금액이 0인 고객들을 제외하고 필터링
placement_A_without_zero = placement_Aloc[placement_A['구매금액'] != 0]['구매금액'].values
// ndarray 형태로 불러왔다. 뒤에 있는 scipy.stats 를 잘 사용하기 위해서 이런 형태로 불러 온것이다.
// 각 데이터가 정규 분포를 따름을 확인하는 과정
// scipy.stats 를 통해서 어떤 종류인지를 확인한다.
// 일원분산분석 수행을 한다.
// p-value 가 거의 -에 수렴 => A, B, C의 평균은 유의한 차이가 존재
// 이런 상태이기 때문에 사후 분석을 진행했다.
// from statsmodels.stats.multicomp import pairwise_tukeyhsd
// (A, C) ~ B 의 관계임을 확인한다.
// A, C 가 비슷하고 B 가 다르다는 것을 확인할 수 있다.
// 각 데이터가 정규분포를 따르는 것을 확인하고
// 다시 같은 방법으로 확인한다.
// A B 가 차이가 있고, A C, B C 가 차이가 없다.
// 이번에는 A ~ (B, C) 관계임을 확인 할 수 있다.
// 구매 여부와 상품 배치 간 관계 파악
// 각각의 데이터를 사용하기 위해서 데이터를 변환, index 가 겹칠 일이 없기 때문에 ignore_index = False 로 두었다.
// 0 이면 구매를 하지 않은것 구매 금액을 체크해서 그걸 boolean 을 다시 astype(int) 을 사용해서 0과 1로 변환한다.
// 데이터를 합친 이유는 범주형 을 분석. 즉, 카이제곱 검정을 하기 위해서 이렇게 사용하였다.
// p-value 가 0.06으로 구매여부와 상품배치에는 관계가 있다고 보기 힘들다.
[02. Part 2) Ch 13. 직접 해봐야 내것이 된다. - 01. A-B 테스트 - 홈페이지 화면을 어떻게 구성할 것인가 - (실습 - Step 3 ~ 6)]
// Step 3. 사이트맵 구성에 따른 체류 시간 차이 분석
// 각각의 sitemap 을 불러 오고, 이번에는 index_col 을 불러 오지 않는다.
// boxplot 함수를 사용해서 확인해본다.
// 하나의 box 는 1부터 시작한다. 그래서 plt.xtics 설정
// 정규 분포를 따르는지 우선 확인
// 거의 0 이다.
// 일원분산분석 : p-value 가 0 에 수렴 > A, B, C 가 거의 차이가 없음.
// Step 4. 할인 쿠폰의 효과 분석
// 발행후 구매횟수 에서 발행전 구매 횟수 차이를 구한다.
// .describe( ) 를 통해서 확인해본다.
// std 가 큰것은 이 값이 큰지를 안 큰지를 알 수가 없다. 분석이 필요하다.
// 통계량만 분석만 하면 기계적으로 분석할 위험이 있다. 그래서 그래프를 그려서 확인해본다.
// Step 5. 체류 시간과 구매 금액 간 관계분석
// 체류시간이 길어지면 구매 금액이 커지는지를 확인해본다.
// 이걸 보기 위해서 상황분석이 필요하다.
// 선형에서는 0.32 상관관계를.. 볼 수 있다.
// Step 6. 구매 버튼 배치에 따른 구매율 차이 분석
// fillna 는 결측을 바꾸는 함수이다.
// pandas.DataFrame.fillna Documentation
pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)
Fill NA/NaN values using the specified method.
Parameters
valuescalar, dict, Series, or DataFrame
Value to use to fill holes (e.g. 0), alternately a dict/Series/DataFrame of values specifying which value to use for each index (for a Series) or column (for a DataFrame). Values not in the dict/Series/DataFrame will not be filled. This value cannot be a list.
method{‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None
Method to use for filling holes in reindexed Series pad / ffill: propagate last valid observation forward to next valid backfill / bfill: use next valid observation to fill gap.
axis{0 or ‘index’, 1 or ‘columns’}
Axis along which to fill missing values.
inplacebool, default False
If True, fill in-place. Note: this will modify any other views on this object (e.g., a no-copy slice for a column in a DataFrame).
limitint, default None
If method is specified, this is the maximum number of consecutive NaN values to forward/backward fill. In other words, if there is a gap with more than this number of consecutive NaNs, it will only be partially filled. If method is not specified, this is the maximum number of entries along the entire axis where NaNs will be filled. Must be greater than 0 if not None.
downcastdict, default is None
A dict of item->dtype of what to downcast if possible, or the string ‘infer’ which will try to downcast to an appropriate equal type (e.g. float64 to int64 if possible).
Returns
DataFrame or None
Object with missing values filled or None if inplace=True.
[02. Part 2) Ch 13. 직접 해봐야 내것이 된다. - 02 고객 세분화를 통한 마케팅 전략 수립 (문제)]
* 문제상황
- 주문 내역 데이터를 바탕으로 고객들을 주문 특성과 주문 상품에 따라 그룹화 하고 싶다!
. 주문 특성 기준 군집화
-> 환불 데이터와 주문 데이터로 분할
-> 특징 부착
-> 코사인 유사도 기반의 계층 군집화 수행
. 주문 상품 기준 군집화
-> 판매 상위 100개 상품 출현 여부를 나타내는 데이터로 변환
-> 자카드 유사도 기반의 계층 군집화 수행
* 주문 특성 기준 군집화 - 데이터 분할
- 해당 데이터에는 주문 데이터와 환불 데이터가 동시에 포함되어 있다.
- 환불 데이터는 주문 수량이 음수라는 특징이 있어, 데이터를 분할하는데 활용한다.
// 이런 특징을 이용해서 주문 데이터와 환불 데이터를 분류할 것이다.
* 주문 특성 기준 군집화 - 특징 추출
1. 군집화 데이터를 유니크한 고객 ID 컬럼만 있는 데이터프레임으로 초기화
2. 주문 / 반품 횟수 계산 및 부착 : 고객 ID 와 주문 ID 를 기준으로 중복을 제거 하는 방식으로 유니크한 (고객 ID, 주문 ID) 를 추출한 뒤, 추출한 데이터에서 고객 ID 의 수를 카운트하여 군집화 데이터에 부착
3. 주문량 계산 및 부착 : 고객 ID에 따른 주문량의 합계를 계산하여 군집화 데이터에 부착
4. 주문 금액 계산 및 부착 : 주문량과 단가를 곱하여 주문 금액을 계산한 뒤, 고객 ID에 따른 주문 금액의 합계를 계산하여 군집화 데이터에 부착
5. 최근성 계산 및 부착 : 현재 날짜에서 주문 날짜의 차이를 뺀 뒤, 고객별 해당 값의 최소 값을 군집화 데이터에 부착
* 주문 특성 기준 군집화 - 코사인 유사도 기반의 계층 군집화 수행
- 군집화 데이터에 (군집 개수 = 5, 군집간 거리 = 평균, 거리 척도 = 코사인 유사도)를 갖는 군집화 모델을 학습하여, 군집별 주요 특성을 파악
* 주문 상품 기준 군집화
- 주문 횟수가 상위 100 등안에 드는 상품들을 기준으로 고객을 상품 구매 여부로 구성된 벡터로 표현
- 이 데이터에 (군집 개수 = 5, 군집 간 거리 = 평균, 거리 척도 = 자카드 유사도)를 갖는 군집화 모델을 학습하여, 군집별 주요 특성을 파악한다.
// 희소한 데이터에 적절한 유사도 이기때문에 자카드 유사도를 사용했다.
[파이썬을 활용한 데이터 전처리 Level UP-Comment]
- 홈페이지 분석을 위한 데이터 불러오기, 검정 방법, p-value 값에 대한 해석에 대해서 알아보았고, 새로운 실습 주제에 대해서 설명함.
'Programming > Python' 카테고리의 다른 글
[패스트캠퍼스 수강 후기] 데이터전처리 100% 환급 챌린지 21회차 미션 (0) | 2020.11.22 |
---|---|
[패스트캠퍼스 수강 후기] 데이터전처리 100% 환급 챌린지 20회차 미션 (0) | 2020.11.21 |
[패스트캠퍼스 수강 후기] 데이터전처리 100% 환급 챌린지 18회차 미션 (0) | 2020.11.19 |
[패스트캠퍼스 수강 후기] 데이터전처리 100% 환급 챌린지 17회차 미션 (0) | 2020.11.18 |
[패스트캠퍼스 수강 후기] 데이터전처리 100% 환급 챌린지 16회차 미션 (0) | 2020.11.17 |