데이터분석(AI학습 23)

이유진·2024년 7월 8일

--05.검색광고 데이터분석.ipynb--

검색광고 데이터 분석

분석목표 :

  1. 중점관리 키워드, 저효율 키워드 추출
  2. 중점관리 광고그룹, 저효율 광고그룹 추출

실제 현업에서

마케팅 쪽 데이터를 다루게 되면 '광고그룹' 과 '키워드' 가 굉~장히 많습니다.

ex) 광고그룹 수백개.. 키워드 90,000개 이상. ---> 엑셀로 다루기에는 한계가 있다.

==> 과연 어떠한 '광고그룹', 어떠한 '키워드' 를 중점적으로 키워야 하지?? 단순 엑셀 작업으로는 추려내기 힘들수도 있다.

==> 그러면 데이터 중심의 운영이 아니라 '감/경험' 에 의존한 운영을 하게 된다.

파이썬을 통해서 어떻게 대량 데이터를 어떻게 파악하고, 또 어떻게 분석할수 있느냐를 알아보도록 하겠습니다.

↓ 분석과정은 다음의 4단계로 진행하도록 하겠습니다.

분석 과정:

  1. 데이터 전처리
  2. 데이터 탐색
  3. 시각화
  4. 데이터 분석

1. 데이터 전처리

  • 학습목표 :
  1. read_excel함수를 사용하여 파이썬에 데이터 불러오기
  2. 데이터프레임의 열 단위 수치연산 및 데이터 타입 다루기

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import os

base_path = r'/content/drive/MyDrive/dataset'

한글 fonts-nanum 설치

!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf

file_path = os.path.join(base_path, '네이버보고서.xls')
file_path

df = pd.read_excel(file_path)
df.head()

불필요한 행 제거

df = pd.read_excel(file_path, skiprows=[0])
df.head()

결측치 확인

df.info()

df.shape

df.isnull()

df.isnull().sum() # 열 단위로 결측치 확인(True = 1, False = 0 이기 때문에.)

df.isnull().sum(axis = 1)

# 데이터프레임의 열 단위 수치연산 및 데이터 타입 다루기

  • 클릭수(반올림처리, 일의 자리수로 변경)
  • 클릭률
  • 평균클릭비용(VAT포함,원)

위 '열' 에 대해 진행할겁니다.

df.head()

클릭수 반올림.

df['클릭수']

clk = round(df['클릭수'], 0)
clk

소수점 제거후 int로 변경

clk.astype(int)

기존 컬럼데이터로 변경

df['클릭수'] = clk.astype(int)

df.head()

전처리 : 클릭률

  • 클릭률 : CTR (Click Through Rate)
  • CTR = 클릭수 / 노출수 * 100

    => 위에서 '클릭수' 가 모두 변경되었으므로 기존 클릭률(%) 열 데이터 갱신(변경) 필요하다

이러한 전처리를 어떻게 하는지 보자

df['클릭수'] / df['노출수'] *100

df.columns

df['클릭률(%)'] = df['클릭수'] / df['노출수'] *100

df.head()

전처리: 평균클릭비용 (CPC, Cost per Click)

  • 평균클릭비용 : 칼럼명에 원 단위로 명시됨

    => 반올림처리, 일의 자리수로 변경

    ('클릭수' 전처리와 비슷)

cpc = round(df['평균클릭비용(VAT포함,원)'])
cpc

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

df.head()


2. 데이터 탐색

df.describe()

pd.set_option('display.float_format', '{:.2f}'.format)

df.describe()

df.head()

df['광고그룹'].unique()

len(df['광고그룹'].unique())

df['키워드'].unique()

len(df['키워드'].unique())

df['광고그룹'].value_counts()

df['노출수'].sort_values(ascending=False) # ascending=False 를 하면 내림차순으로 보여줌.


3. 시각화를 통한 데이터 탐색

df['노출수'].plot()

df['노출수'].sort_values()

df['노출수'].sort_values().reset_index(drop=True)

df['노출수'].sort_values().reset_index(drop=True).plot()

df['클릭수'].sort_values().reset_index(drop=True).plot()

df['총비용(VAT포함,원)'].sort_values().reset_index(drop=True).plot()

df.columns

위 시각화를 통해

비용대비 노출수, 클릭수 저조한 구간은 어디인가?

중점관리 키워드

imp = df['노출수']
imp

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

df.describe()

imp.median()

imp.quantile(0)

imp.quantile(1)

95 백분위수 찾기

imp.quantile(0.95)

95% 이상 찾기

imp[imp > imp.quantile(0.95)]

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

imp

df.head()

df_index = df.set_index('키워드')
df_index

imp = df_index['노출수']
imp

imp 노출수 상위 5%의 키워드 추출

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

imp

클릭수 상위 5%의 키워드 추출

df2_index = df.set_index('키워드')
df2_index

clk = df2_index['클릭수']
clk

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

clk

'노출수' 상위 5%, '클릭수' 상위 5% 키워드를 출력했다.

여기서 중점관리 키워드는 ?

중점관리 키워드 선별

  • 노출수와 클릭수 모두 95백분위수 이상

imp = df_index['노출수']
clk = df_index['클릭수']

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

중점관리 키워드

result.index

저효율 키워드 선별

df['노출수'].sort_values().reset_index(drop=True).plot()

df['클릭수'].sort_values().reset_index(drop=True).plot()

df['총비용(VAT포함,원)'].sort_values().reset_index(drop=True).plot()

  • 노출수, 클릭수 기준 상위 5%의 키워드가 아닌데도 불구하고 비용이 많이 쓰이고 있는 저효율 키워드를 다음과 같이 정의했다 하자
  1. 노출수 95백분위수 미만
  2. 클릭수 95백분위수 미만
  3. 총비용 85백분위수 이상
  4. 총비용 95백분위수 미만

cost = df_index['총비용(VAT포함,원)']

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

profile
독해지자

0개의 댓글