티스토리 뷰
종합실습
비즈니스 시나리오 - 고객사는 카시트 판매 회사
매출하락에 대해 파악해야 한다.
가격 경쟁력 하락이 타당한가?
국내 시장에 집중된 것이 타당한가?
지역마다 구매력 파악을 잘 했는가?
추정에 불과하므로 데이터 근거를 만든다.
1. 수치형 그래프 그리기
sales가 판매량 - 타깃값
경쟁사의 가격, 지역 평균 소득 이나 광고 예산
가장 먼저, 타깃값의 비즈니스 의미를 파악한다.
분포를 본다.
eda_1_n에 df와 타깃값을 넣는다.
400.0 | 7.496325 | 2.824115 | 0.0 | 5.39 | 7.49 | 9.32 | 16.27 |
2. 보이는 그대로를 넘어서, 비즈니스적 의미를 파악한 내용을 적어보자.
판매량이 0인 지역이 있고, 대부분 판매량이 5천~1만개 사이이다.
즉, 추가 분석 사항으로 0~4천, 4천~1만, 1만 이상을 구분해서 분석해볼 필요 있다.
comprice,income,price
1. 변수의 비즈니스 의미 파악
2. 기초통계량 및 분포 확인
3. 비즈니스 관점에서 고민하기 -> 4. 추가 분석할 사항
1~4를 반복하여 가장 fit한 해답을 찾는다.
compprice(경쟁사 가격)
낮은 가격인 90 달러, 80이하인 가격을 제공할 수 있는 이유는?
높은 가격인 160달러, 특히 예외값은 180달러에서 제공할 수 있는 이유는? -> 가격 정책에 대해서 알아봐야 한다.
#비즈니스 관점의 고민 사항
#경쟁사의 제품 가격은 평균적으로 어느 정도?
#경쟁사 중 일부는 높은 가격
#경쟁사들의 가격 차이가 큰 경우, 자사 제품에 대한 경쟁력이 어떻게 될지 고려가 필요
추가 분석
경쟁사의 가격 수준을 비교하는 것 외에, 자사 제품의 판매량과의 상관관계를 살펴보면 좋다.
가격이 높을수록 판매량이 감소하는 경향이 있는지 등을 확인할 수 있다.
상관관계 값이 높다면 가격이 판매량에 미치는 영향이 크다.
이에 따라 자사 제품 가격을 조정하는 등의 전략을 고려
옷 = 아울렛 매장->창고매장(떙처리) -> 무게 달아서 판다
어떤 비즈니스 문제를 해결하려고 그를 위해서야 어떤 모델을 개발해야 하는지 알 수 있다.
INCOME
지역주민의 평균 소득
봉우리가 여러개다. 멀티 모달 -> 데이터 분포가 다른 특성을 가지고 있는데, 그냥 합쳐놓은 것이다.
소득수준에 따라 정규분포를 이루고 있지 않고, 전반적으로 모든 소득수준에서 구매량이 있다.
즉, 카시트는 모든 소득수준에서 필요한 필수품의 성격으로 볼 수 있다.
최저임금이 2만 달러로 예상.
20~45, 60~100의 사람이 많음.
즉, 두 봉우리로 나누어진다.
&&&
재밌는 그래프
이동통신 초과 통화량 = x축
0에서 엄청 많고, 60,200에서 봉우리가 구분이 된다.
초과 사용을 위한 상품제 = 0,60,200
딱 보면 뭔가 이유가 있다. 즉, 이렇게 모이게 되는 이유를 찾아내는 게 데이터 분석이다.
즉, income도 뭔가 구분되는 특징이 있는 것이다.
&&&
Price
자사 가격
#주로 100달러에서 130달러 사이 판매
그 중에서 125달러로 가장 많이 판매
지역별 평균적인 가격보다 더 비싸게 팔고 있다 -> 가격이 너무 비싼가?
각 지역이 어떤 특정을 지니고 있는지를 알아야 한다.
100달러에서 140달러 사이에 밀집
판매 가격은 주요 원인이 아니라는 걸로 예상
분포 비교로 가능
sns.kdeplot(x='Price',data=data,label='pri')
plt.grid()
plt.legend()
plt.show()
Advertising
0원부터 2만 9천 달러.
거의 0원에 몰려있다.
왜 0원에 몰려있을까?
-> 국외 매장인가?
또한 0 빼고 분석도 해봐야 한다.
사용한 부분들을 확인할 필요가 있다.
국내시장과 해외시장의 광고 그래프를 비교해보았을 때 큰 차이가 나지 않았다.
0원 빼고 분석하기
0원 빼고 분석하면 0~5구간과 6~20 구간이 나뉘어진다.
그리고 20 이상의 구간은 왜 그런건지 확인해야봐야 한다.
그리고 14는 왜 없는가?
범주형 분석
진열상태, 도심 지역 여부, 미국에 있는지 여부
def eda_1_cat(df, feature) :
t1 = df[feature].value_counts()
t2 = df[feature].value_counts(normalize = True)
t3 = pd.concat([t1, t2], axis = 1) #빈도수와 비율을 concat(옆으로 붙인다)
t3.columns = ['count','ratio']
display(t3)
sns.countplot(x = feature, data = df)
plt.show()
Bad의 수치가 굉장히 크다.
bad, medium을 결정짓는 기준이 도대체 뭔가?
그 상태에서 Bad로 이어지는 요인은?
Urban
도심에 70%정도가 있다.
왜 도심에서 더 잘팔리는가? -> 차가 많아서?
차량 데이터가 있으면 더 좋을 것 같다.
보통 도심지역에 아이를 키우는 가정이 많을 확률이 높기 때문에 구매력이 높을 가능성이 있다 -> 고객이 누구인지 타게팅
이 경우 income을 조사해 구매력을 확인
도심지역에 거주 할 수록 광고예산이 충분히 들어갔는지 확인
과연?
추가분석
도시와 연령 비교
도시와 광고의 비교
매장 전략은 도심에 집중하고 있다.
도심에 있는 매장 -> 구매력이 높을 것이다 -> 판매량도 높을 것이다 = 가설
p-value를 살펴봐야 한다.
이게 이변량 분석에 해당된다.
US
65%정도가 미국에 있다.
그렇다면 미국 외 지역에서의 가격은 어떨까?
미국 외 지역에서의 경쟁사 가격은?
해외 시장이 적절한지를 판단
해외의 법규,얼마나 매출이 나오는지.
그 지역의 구매력이 어떤가?
이 모든 게 다 이변량 분석과 관련이 있다.
사이즈 다변화보다는, 미국 체형에 맞추기
미국에서의 판매량이 더 높은가 비교 필요
해외에서는 어떤 옵션의 제품들이 잘 판매되는지 파악하기
실전에서는 어떤 기간 동안의 판매량인가를 알아야 한다.
이 데이터 자체가 어떻게 수집이 되었고, 어떻게 활용해야 하는지 알 수 있다.
결론적으로, 도메인 지식이 없어서 힘들다. 분석할 때 중요한 건 도메인 지식이다.
총정리
concat,merge를 배웠다.
concat은 df의 구조를 기준으로 합친다. 리스트 입력 가능. 방향 axis=0,1
axis=0은 위아래로 붙이는 것.
axis=1은 옆으로 붙이는 것.
merge는 특정열의 값을 기준으로 합친다. 방향 지정 없다.
inner와 left만 생각해라.
CRISP-DM
1. 문제 정의
2. 데이터 분석의 방향을 결정
3. 가설 x->y
x,y는 정보다. 범주형, 수치형
이 실습은 고객이 가설에 해당되는 데이터를 준 것이다.
이 feature 조차도 사실 우리가 만들어야 한다.
데이터 이해
1. 원본이 어디에서 왔는지 식별
2. 하나의 데이터 프레임으로 만든다.
3. 분석 - 1단계, 2단계, 3단계
3단계는 도구는 같고 해석은 다르다.
1단계 : 개별 정보 분석하기 (단변량 분석)
2단계 : x->y 인 가설이 진짜인지 확인하는 단계
3단계 : x1 vs x2에 관계가 있는지 분석(상관분석)
수치형 - 기초통계량 / 히스토그램, kde, 바 플롯
범주형 - 빈도표 / 카운트 플롯, 파이차트
skewed data는 원래 정규분포로 바뀌어줘야 한다.
요즘은 첨도나 왜도, 이상치는 영향을 덜 받는 모델링을 쓴다.
그래서 잘 안한다.