검색광고 데이터 분석 : 검색광고 데이터 키워드/광고그룹 분석

2022. 7. 10. 14:01Data Science/with Python(Numpy, Pandas …ect.)

키워드 분석 : 저효율키워드 출력

노출수와 클릭수 상위 5%에

해당하는 키워드를 추출하는 작업을

통해 quantile함수를 활용한 95백분위수를

찾고 그 이상의 노출수를 추출, 상위 5%에

해당하는 키워드를 추출해보고자 한다.

 

imp=df['노출수']

# quantile (default : 2사분위수(중앙값))
imp.quantile()

# median - 중앙값
imp.median()

# 최소값
imp.quantile(0)
imp.min()

# 최대값
imp.quantile(1)
imp.max()

quantile 함수는 분위수를 출력하는

함수로 default 값은 2사분위수이다.

※ 2사분위수 = 중앙값

물론 median이라는 중앙값만 호출할 수

있는 함수가 따로 있으나 수학 통계에서도

그렇듯 사분위수로도 가능하다.

(괄호)안에 0을 넣어주면 최소값을,

1을 넣어주면 최대값을 반환한다.

 

# 95백분위수
quantile(0.95)

그럼 95 백분위수는 어떻게 구하느냐.

위와 같이 백분률이 아닌 비율로

치환하여 대입해주면 된다.

 

imp = imp[imp>=imp.quantile(0.95)]

 

우리에게 필요한 것은 95백분위수

하나가 아닌 그 이상의 상위 5% 숫자들이

필요한 것이므로 위와 같이 마스킹하여

새로운 imp에 대입해준다.

그럼 이렇게 출력이 되는데

index가 있기 때문에 이것을 기준으로

'키워드'도 추출이 가능하다.

 

df_index = df.set_index('키워드')
imp = df_index['노출수']
imp = imp[imp>=imp.quantile(0.95)]

데이터프레임의 인덱스를 키워드로 변경하고

해당 데이터프레임에서 '노출수'만 imp에

할당해서 뽑아낸다. 그럼 index와 '노출수'만

뽑히는데 index 자리에 '키워드'를 넣어놓은

상태이므로 키워드와 노출수로 이루어진

데이터프레임이 완성된다. 거기서 위에서

상위 5%를 추출한 코드를 뒤에 붙여주어

다시 출력해주면 우리가 원하던 사위 5%의

키워드와 노출수를 뽑아낼 수 있다.

 

조건이 여러개일 경우

예를 들어 노출수와 클릭수 모두 95백분위수

이상인 데이터만 뽑아내고 싶다면

데이터프레임[(조건문)&(조건문)]

형식을 이용해주면 된다.

 

▼적용 예시▼

imp = df_index['노출수']
clk = df_index['클릭수']
result = df_index[(imp>=imp.quantile(0.95))&(clk>=clk.quantile(0.95))]

 

012

위 그래프를 확인해보면 노출수, 클릭수가

상위 5%의 키워드가 아닌데도 불구하고

비용이 많이 쓰이고 있는 키워드가 있다.

result = df_index[(imp<imp.quantile(0.95))&(clk<clk.quantile(0.95))&(cost>=cost.quantile(0.85))&(cost<cost.quantile(0.95))]

노출수와 클릭수가 95백분위수 미만이면서

총비용이 85백분위수 이상 95백분위수 미만인

중복 조건을 걸어주어 필터링 한 것을 result에

대입하고 result.index로 result의 index(키워드)를

추출해 저효율키워드를 확인했다.

 


 

광고그룹 분석

말 그대로 광고그룹을 기준으로 분석을

해볼 것이기 때문에 groupby 함수를

이용하여 데이터 구성을 광고그룹

기준으로 재구성해줄 것이다.

grouped=df.groupby('광고그룹')
grouped.count()

df를 광고그룹을 기준으로

그룹핑하고 다른 요소들을 count

해준 것으로 아래와 같이 출력된다.

 

전처리를 하기 앞서 어떤 요소들을

정리해주면 좋을지 확인하기 위해

아래 함수를 활용하여 기초통계량을

확인해본다.

# 평균
grouped.mean()

# 중앙값
grouped.median()

# 표준편차
grouped.std()

# 분산
grouped.var()

# 그룹 데이터 합계
grouped.sum()

 

 

광고그룹 분석 전처리

현재는 키워드 기준으로 ctr, cpc가

계산되어 있으므로 광고그룹 기준으로

다시 계산해준다. 방법은 키워드

기준으로 분석했을 때와 똑같다.

# 클릭률(ctr) = 클릭수 / 노출수
df_group['클릭률(%)']=df_group['클릭수']/df_group['노출수']

# 평균클릭비용(cpc) = 총비용 / 클릭수
df_group['평균클릭비용(VAT포함,원)']=df_group['총비용(VAT포함,원)']/df_group['클릭수']

 

다음은 결측값을 처리한다.

# 결측값 해결
## 클릭수 column 중 0인 데이터 탐색
df_group[df_group['클릭수']==0]

## 결측값 대체
df_group['평균클릭비용(VAT포함,원)']=df_group['평균클릭비용(VAT포함,원)'].fillna(0)

fillna 함수는 전달된 값으로

결측값(na)을 대체하는 함수다.

 

다음은 클릭비용과 같이 정수단위로

떨어져야하는 요소임에도 소수점이

나온 값을 정리해줄 차례이다.

df_group['평균클릭비용(VAT포함,원)']=round(df_group['평균클릭비용(VAT포함,원)'],0)
df_group['평균클릭비용(VAT포함,원)']=df_group['평균클릭비용(VAT포함,원)'].astype(int)

round함수를 이용하여 반올림을

해주고,  astype 함수로 데이터타입을

int로 바꿔주어 소수점을 제거해줬다.

 

 

데이터 시각화

# 노출수 칼럼 선그래프
(((df_group['노출수'].sort_values()).reset_index()).drop('광고그룹', axis=1)).plot()

# 클릭수 칼럼 선그래프
(((df_group['클릭수'].sort_values()).reset_index()).drop('광고그룹', axis=1)).plot()

# 총비용 칼럼 선그래프
(((df_group['총비용(VAT포함,원)'].sort_values()).reset_index()).drop('광고그룹', axis=1)).plot()

노출수를 정렬한 뒤 index로

설정함으로써 x 축이 노출수/클릭수/

총비용 값이 되도록 했다.

drop 함수로 이제는 필요없는

광고그룹 column을 지워준 후

선그래프로 나타나면 위와

같이 출력된다.

imp = df_group['노출수']
clk = df_group['클릭수']
cost = df_group['총비용(VAT포함,원)']

# 중점관리 광고그룹
result1 = df_group[(imp>=imp.quantile(0.8))&(clk>=clk.quantile(0.9))]
result1.index

# 저효율 광고그룹
result2 = df_group[(imp<imp.quantile(0.8))&(clk<clk.quantile(0.9))&(cost>=cost.quantile(0.6))&(cost<cost.quantile(0.9))]
result2.index

이를 통해 노출수가 상위 20%이면서

클릭수가 상위 10%인 중점관리 광고그룹과

노출수 80% 미만, 클릭수 90%미만이면서

총비용이 60%이상 90%미만인 저효율

광고그룹을 추출할 수 있다.