Python으로 URL 위치를 기반으로 브랜드가 없는 유기적 트래픽 수익을 예측하는 방법

게시 됨: 2022-05-24

SEO 예측이란 무엇입니까?

SEO 예측 또는 유기적 트래픽 추정은 사이트의 미래 유기적 트래픽, SEO 수익 및 SEO ROI를 추정하기 위해 자신의 사이트 데이터 또는 제3자 데이터를 사용하는 프로세스입니다. 이 추정치는 데이터를 기반으로 하는 다양한 방법을 사용하여 계산할 수 있습니다.

이 자습서에서는 URL 위치와 현재 수익을 기반으로 브랜드가 없는 유기적 수익과 브랜드가 없는 유기적 트래픽을 예측하려고 합니다. 이것은 SEO로서 월별, 분기별 또는 연간 예산 증가에서 제품 및 개발 팀의 더 많은 인력에 이르기까지 다른 이해 관계자로부터 더 많은 동의를 얻는 데 도움이 될 수 있습니다.

이 튜토리얼은 브랜드가 없는 유기적 트래픽에만 적용되는 것은 아닙니다. 몇 가지 변경을 하고 Python을 알면 대상 페이지 트래픽을 추정하는 데 사용할 수 있습니다.

그 결과 아래 이미지와 같은 Google Sheet를 생성할 수 있습니다.

Google 스프레드시트 이미지

Google 스프레드시트 이미지

브랜드가 없는 SEO 트래픽 예측

소개를 읽은 후 가장 먼저 물어볼 수 있는 질문은 "브랜드가 없는 유기적 트래픽을 계산하는 이유는 무엇입니까?"입니다.

아마존과 같은 회사를 생각해 봅시다. 책이나 마스크를 사고 싶을 때 "마스크 아마존 구매"라고 검색하면 됩니다.

브랜드는 종종 가장 먼저 떠오르는 생각이며, 무언가를 사고 싶을 때 선호하는 것은 이러한 회사에서 필요한 것을 사는 것입니다. 각 산업에는 Google 검색에서 사용자의 행동에 영향을 미치는 브랜드 회사가 있습니다.

Amazon의 Google Search Console(GSC) 데이터를 확인하면 브랜드 쿼리에서 많은 트래픽을 수신하고 대부분 브랜드 쿼리의 첫 번째 결과는 해당 브랜드의 사이트임을 알 수 있습니다.

저와 같은 SEO로서 "오직 우리 브랜드만이 SEO에 도움이 됩니다!"라는 말을 많이 들었을 것입니다. "아니요, 그렇지 않습니다"라고 말하고 브랜드가 아닌 검색어의 트래픽과 수익을 표시하려면 어떻게 해야 합니까?

Google의 알고리즘이 너무 복잡하고 브랜드 검색과 비브랜드 검색을 명확하게 구분하기 어렵다는 것을 알고 있기 때문에 이를 증명하는 것은 훨씬 더 복잡합니다. 그러나 이것이 SEO로서 우리가 하는 일을 더욱 중요하게 만드는 것입니다.

이 튜토리얼에서는 브랜드와 비브랜드를 구별하는 방법과 SEO가 얼마나 강력한지 보여줄 것입니다.

귀하의 회사가 브랜드가 아니더라도 이 기사에서 여전히 많은 것을 얻을 수 있습니다. 사이트의 유기적 데이터를 추정하는 방법을 배울 수 있습니다.

트래픽 추정을 기반으로 한 SEO ROI

당신이 어디에 있든 무엇을 하든 자원에는 한계가 있습니다. 그것이 예산이든 단순히 근무 시간의 수이든. 리소스를 가장 잘 할당하는 방법을 아는 것은 전체 및 SEO 투자 수익률(ROI)에 중요한 역할을 합니다.

CMO, 마케팅 부사장 또는 성과 마케터는 모두 다른 KPI를 가지고 있으며 목표를 달성하기 위해 다른 리소스가 필요합니다. 필요한 것을 얻도록 하는 가장 좋은 방법은 회사에 가져다줄 수익을 보여줌으로써 그 필요성을 증명하는 것입니다. SEO ROI도 다르지 않습니다. 연중 예산 할당 시기가 다가오고 팀에서 더 많은 예산을 요청하려는 경우 SEO ROI를 추정하면 협상에서 우위를 점할 수 있습니다. 브랜드가 없는 트래픽 추정치를 계산한 후에는 원하는 결과를 얻는 데 필요한 예산을 더 잘 평가할 수 있습니다.

SEO 전략에 대한 SEO 예측의 효과

아시다시피, 3~6개월마다 SEO 전략을 검토하고 최상의 결과를 얻을 수 있도록 조정합니다. 그러나 회사에 가장 큰 이익이 되는 곳이 어디인지 모를 때는 어떻게 됩니까? 의사 결정을 내릴 수는 있지만 사이트 트래픽을 보다 포괄적으로 볼 때 내린 결정만큼 효과적이지 않습니다.

브랜드가 없는 유기적 트래픽 수익 추정은 방문 페이지 및 쿼리 세분화와 결합되어 SEO 관리자 또는 SEO 전략가로서 더 나은 전략을 개발하는 데 도움이 되는 큰 그림을 제공할 수 있습니다.

유기적 트래픽을 예측하는 다양한 방법

SEO 커뮤니티에는 미래의 유기적 트래픽을 예측하기 위한 다양한 방법과 공개 스크립트가 있습니다.

이러한 방법 중 일부는 다음과 같습니다.

  • 전체 사이트에 대한 유기적 트래픽 예측
  • 특정 페이지(블로그, 제품, 카테고리 등) 또는 단일 페이지에 대한 유기적 트래픽 예측
  • 특정 쿼리(쿼리에는 "구매", "방법" 등이 포함됨) 또는 쿼리에 대한 유기적 트래픽 예측
  • 특정 기간(특히 계절적 이벤트)에 대한 유기적 트래픽 예측

내 방법은 특정 페이지에 대한 것이고 기간은 한 달 동안입니다.

[사례 연구] 온페이지 SEO로 새로운 시장에서 성장 주도

Springly가 북미 시장으로의 확장을 모색하기 시작했을 때 온페이지 SEO는 새로운 시장에서 성공적인 시작을 위한 열쇠 중 하나로 확인되었습니다. 콘텐츠 전략을 위한 기술적 SEO를 통해 0에서 성공으로 가는 방법을 알아보십시오.
사례 연구 읽기

유기적 트래픽 수익을 계산하는 방법

정확한 방법은 Google Analytics(GA) 데이터를 기반으로 합니다. 사이트가 새로운 것이라면 타사 도구를 사용해야 합니다. 나는 당신이 자신의 데이터를 가지고 있을 때 그러한 도구를 사용하는 것을 피하는 것을 선호합니다.

데이터에서 가능한 오류를 찾으려면 실제 페이지 데이터와 비교하여 사용 중인 타사 데이터를 테스트해야 합니다.

Python으로 브랜드가 없는 SEO 트래픽 수익을 계산하는 방법

지금까지 우리는 유기적 트래픽 및 수익 예측의 다양한 측면을 더 잘 이해하기 위해 익숙해져야 하는 많은 이론적 개념을 다루었습니다. 이제 이 기사의 실용적인 부분에 대해 알아보겠습니다.

먼저 CTR 곡선을 계산하는 것으로 시작하겠습니다. Oncrawl에 대한 내 CTR 곡선 기사에서 두 가지 다른 방법과 코드를 약간 변경하여 사용할 수 있는 다른 방법에 대해 설명합니다. 먼저 클릭 곡선 기사를 읽는 것이 좋습니다. 이 기사에 대한 통찰력을 제공합니다.

이 기사에서는 트래픽 추정에서 원하는 특정 결과를 얻기 위해 코드의 일부를 조정합니다. 그런 다음 GA에서 데이터를 가져와 GA 수익 차원을 사용하여 수익을 추정합니다.

Python으로 비브랜드 유기적 트래픽 수익 예측: 시작하기

Python을 몰라도 이 코드를 직접 실행할 수 있습니다. 그러나 이 예측 코드에서 사용할 Python 라이브러리에 대한 기본 지식과 Python 구문에 대해 약간 알고 있는 것이 좋습니다. 이렇게 하면 내 코드를 더 잘 이해하고 사용자에게 유용한 방식으로 사용자 지정하는 데 도움이 됩니다.

이 코드를 실행하기 위해 "Jupyter" 확장이 포함된 Microsoft의 Python 확장과 함께 Visual Studio Code를 사용합니다. 그러나 Jupyter 노트북 자체를 사용할 수 있습니다.

전체 프로세스에서 다음 Python 라이브러리를 사용해야 합니다.

  • 넘피
  • 판다
  • 음모

또한 일부 Python 표준 라이브러리를 가져올 것입니다.

  • JSON
  • 인쇄
 # 프로세스에 필요한 라이브러리 가져오기
json 가져오기
pprint에서 가져오기 pprint

numpy를 np로 가져오기
pandas를 pd로 가져오기
plotly.express를 px로 가져오기

1단계: 상대 CTR 곡선 계산(상대 클릭 곡선)

첫 번째 단계에서는 상대 CTR 곡선을 계산하려고 합니다. 그러나 상대 CTR 곡선은 무엇입니까?

상대 CTR 곡선이란 무엇입니까?

먼저 '절대 CTR 곡선'에 대해 이야기해 보겠습니다. 절대 CTR 곡선을 계산할 때 첫 번째 위치의 중앙값 CTR(또는 평균 CTR)이 36%이고 두 번째 위치가 20%인 식입니다.

상대 CTR 곡선(백분율의 순간)에서 각 위치 중앙값을 첫 번째 위치의 CTR로 나눕니다. 예를 들어, 첫 번째 위치의 상대 CTR 곡선은 0.36 / 0.36 = 1이 되고 두 번째 위치는 0.20 / 0.36 = 0.55가 되는 식입니다.

이것을 계산하는 것이 왜 유용한지 궁금하신가요? CTR이 44%인 1순위 페이지를 생각해 보십시오. 이 페이지가 위치 2로 이동하면 CTR 곡선이 20%로 감소하지 않고 CTR이 44% * 0.55 = 24.2%로 감소할 가능성이 더 큽니다.

1. GSC에서 브랜드 및 비브랜드 유기 트래픽 데이터 가져오기

계산 프로세스를 위해 GSC에서 데이터를 가져와야 합니다. 처음에는 모든 데이터가 브랜드 쿼리를 기반으로 하고 다음에는 모든 데이터가 비브랜드 쿼리를 기반으로 합니다.

이 데이터를 얻으려면 Python 스크립트 또는 "Search Analytics for Sheets" Google 스프레드시트 추가 기능과 같은 다양한 방법을 사용할 수 있습니다. GSC API 탐색기를 사용하겠습니다.

이 데이터의 출력은 각 페이지의 성능을 보여주는 두 개의 JSON 파일입니다. 하나의 JSON 파일은 브랜드 쿼리를 기반으로 하는 랜딩 페이지 성능을 보여주고 다른 하나는 브랜드가 아닌 쿼리를 기반으로 랜딩 페이지 성능을 보여줍니다.

GSC API 탐색기에서 데이터를 얻으려면 다음 단계를 따르세요.

  1. https://developers.google.com/webmaster-tools/v1/searchanalytics/query로 이동합니다.
  2. 페이지 오른쪽 상단에 있는 API 탐색기를 최대화합니다.
  3. " siteUrl " 필드에 도메인 이름을 입력합니다. 예: " https://www.example.com " 또는 " http://your-domain.com ".
  4. 요청 본문에서 먼저 " startDate " 및 " endDate " 매개변수를 정의해야 합니다. 내 선호도는 지난 30일입니다.
  5. 그런 다음 " dimensions "을 추가하고 이 목록에 대해 " page "를 선택합니다.
  6. 이제 쿼리를 필터링하기 위해 " dimensionFilterGroups "를 추가합니다. 브랜드 쿼리에 대해 한 번, 비 브랜드 쿼리에 대해 두 번째.
  7. 마지막으로 " rowLimit "을 25,000으로 설정했습니다. 매월 유기적 트래픽이 발생하는 사이트 페이지가 25,000개가 넘는 경우 요청 본문을 수정해야 합니다.
  8. 각 요청을 수행한 후 JSON 응답을 저장합니다. 브랜드 성능의 경우 JSON 파일을 " branded_data.json "으로 저장하고 비브랜드 성능의 경우 JSON 파일을 " non_branded_data.json "으로 저장합니다.

요청 본문의 매개변수를 이해한 후에는 요청 본문 아래에 복사하여 붙여넣기만 하면 됩니다. 브랜드 이름을 " brand variation names "으로 바꾸는 것을 고려하십시오.

브랜드 이름은 파이프라인 또는 " | ". 예: " amazon|amazon.com|amazn ".

GSC API 탐색기

GSC API 탐색기

브랜드 요청 본문:

 {
  "시작일": "2022-02-01",
  "종료일": "2022-03-01",
  "차원": [
    "페이지"
  ],
  "dimensionFilterGroups": [
    {
      "필터": [
        {
          "차원": "QUERY",
          "표현": "브랜드 변형 이름",
          "연산자": "INCLUDING_REGEX"
        }
      ]
    }
  ],
  "rowLimit": 25000
}

브랜드가 없는 요청 본문:

 {
  "시작일": "2022-02-01",
  "종료일": "2022-03-01",
  "차원": [
    "페이지"
  ],
  "dimensionFilterGroups": [
    {
      "필터": [
        {
          "차원": "QUERY",
          "표현": "브랜드 변형 이름",
          "연산자": "EXCLUDING_REGEX"
        }
      ]
    }
  ],
  "rowLimit": 25000
}

2. Jupyter 노트북으로 데이터 가져오기 및 사이트 디렉토리 추출

이제 데이터를 수정하고 원하는 것을 추출할 수 있도록 데이터를 Jupyter 노트북에 로드해야 합니다. 위에서 중단한 부분부터 다시 시작하겠습니다.

브랜드 데이터를 로드하려면 다음 코드 블록을 실행해야 합니다.

 # 브랜드에 대한 웹사이트 URL 성능 및 브랜드 쿼리를 위한 DataFrame 생성
open("./branded_data.json")을 json_file로 사용:
    branded_data = json.loads(json_file.read())["행"]
    branded_df = pd.DataFrame(branded_data)

# 'keys' 컬럼의 이름을 'landing page' 컬럼으로 변경하고, 'landing page' 목록을 URL로 변환
branded_df.rename(columns={"keys": "방문 페이지"}, inplace=True)
branded_df["방문 페이지"] = branded_df["방문 페이지"].apply(람다 x: x[0])

랜딩 페이지 비브랜드 성능의 경우 다음 코드 블록을 실행해야 합니다.

 # 브랜드가 아닌 쿼리에 대한 웹사이트 URL 성능을 위한 DataFrame 만들기
json_file로 open("./non_branded_data.json") 사용:
    non_branded_data = json.loads(json_file.read())["행"]
    non_branded_df = pd.DataFrame(non_branded_data)

# 'keys' 컬럼의 이름을 'landing page' 컬럼으로 변경하고, 'landing page' 목록을 URL로 변환
non_branded_df.rename(columns={"keys": "방문 페이지"}, inplace=True)
non_branded_df["방문 페이지"] = non_branded_df["방문 페이지"].apply(람다 x: x[0])

데이터를 로드한 다음 디렉토리를 추출하기 위해 사이트 이름을 정의해야 합니다.

 # 따옴표 사이에 사이트 이름을 정의합니다. 예: 'https://www.example.com/' 또는 'http://mydomain.com/'
SITE_NAME = "https://www.your_domain.com/"

브랜드가 없는 성능에서 디렉터리만 추출하면 됩니다.

 # 각 방문 페이지(URL) 디렉토리 가져오기
non_branded_df["디렉토리"] = non_branded_df["방문 페이지"].str.extract(
    pat=f"((?<={SITE_NAME})[^/]+)"
)

그런 다음 이 프로세스에 중요한 디렉토리를 선택하기 위해 디렉토리를 인쇄합니다. 사이트에 대한 더 나은 통찰력을 얻으려면 모든 디렉토리를 선택하는 것이 좋습니다.

 # 출력의 모든 디렉토리를 얻으려면 Pandas 옵션을 조작해야 합니다.
pd.set_option("display.max_rows", 없음)

# 웹사이트 디렉토리
non_branded_df["디렉토리"].value_counts()

여기에서 중요한 디렉토리를 삽입할 수 있습니다.

 """ CTR 곡선을 얻는 데 중요한 디렉토리를 선택하십시오.
디렉토리를 'important_directories' 변수에 삽입하십시오. 
예: 'product,tag,product-category,mag'. 쉼표로 디렉토리 값을 구분하십시오.
""

IMPORTANT_DIRECTORIES = "당신의_중요한_디렉터리"
IMPORTANT_DIRECTORIES = IMPORTANT_DIRECTORIES.split(",")

3. 위치에 따라 페이지에 레이블 지정 및 상대 CTR 곡선 계산

이제 위치에 따라 방문 페이지에 레이블을 지정해야 합니다. 우리는 방문 페이지의 위치를 ​​기반으로 각 디렉토리에 대한 상대 CTR 곡선을 계산해야 하기 때문에 이렇게 합니다.

 # 브랜드가 아닌 위치에 레이블 지정
범위(1, 11)의 i에 대해:
    non_branded_df.loc[
        (non_branded_df["position"] >= i) & (non_branded_df["position"] < i + 1),
        "위치 레이블",
    ] = 나

그런 다음 디렉터리를 기반으로 방문 페이지를 그룹화합니다.

 # '디렉토리' 값을 기준으로 랜딩 페이지 그룹화
non_brand_grouped_df = non_branded_df.groupby(["디렉토리"])

상대 CTR 곡선을 계산하는 함수를 정의해 보겠습니다.

 def each_dir_relative_ctr_curve(dir_df, 키):
    """이 함수는 각 IMPORTANT_DIRECTORIES 상대 CTR 곡선을 계산합니다.
    ""
    # 'position label' 값에 따라 "non_brand_grouped_df" 그룹화
    dir_grouped_df = dir_df.groupby(["위치 레이블"])

    # 각 포지션의 중앙값 CTR을 저장하기 위한 리스트
    median_ctr_list = []
    # 각 디렉토리를 키로 저장하고 값은 "median_ctr_list"입니다.
    directory_median_ctr = {}

    # 각 "dir_grouped_df" 그룹을 반복합니다.
    범위(1, 11)의 i에 대해:
        # 예를 들어 디렉토리에 위치 4에 대한 데이터가 없는 상황을 처리하기 위한 try-except
        노력하다:
            tmp_df = dir_grouped_df.get_group(i)
            median_ctr_list.append(np.median(tmp_df["ctr"]))
        제외하고:
            median_ctr_list.append(0)

    # 상대 CTR 곡선 계산
    directory_median_ctr[키] = np.array(median_ctr_list) / np.array(
        [median_ctr_list[0]] * 10
    )

    반환 디렉토리_median_ctr

함수를 정의한 후 실행합니다.

 # 디렉토리 순회 및 'each_dir_relative_ctr_curve' 함수 실행
directory_median_ctr_dict = dict()

키의 경우 non_brand_grouped_df의 항목:
    IMPORTANT_DIRECTORIES에 키가 있는 경우:
        directory_median_ctr_dict.update(each_dir_relative_ctr_curve(항목, 키))

pprint(directories_median_ctr_dict)

이제 랜딩 페이지의 브랜드 및 비브랜드 성능을 로드하고 비브랜드 데이터에 대한 상대 CTR 곡선을 계산합니다. 비브랜드 데이터에 대해서만 이 작업을 수행하는 이유는 무엇입니까? 우리는 브랜드가 아닌 유기적 트래픽과 수익을 예측하기를 원하기 때문입니다.

2단계: 브랜드가 없는 유기적 트래픽 수익 예측

이 두 번째 단계에서는 수익 데이터를 검색하고 수익을 예측하는 방법에 대해 알아보겠습니다.

1. 브랜드 및 비 브랜드 유기농 데이터 병합

이제 브랜드 데이터와 비브랜드 데이터를 병합하겠습니다. 이렇게 하면 모든 트래픽과 비교하여 각 방문 페이지에서 브랜드가 없는 자연 트래픽의 비율을 계산하는 데 도움이 됩니다.

 # 'main_df'는 '전체 사이트 데이터'와 '비브랜드 데이터' DataFrames의 조합입니다.
# 이 DataFrame을 사용하여 대부분의 클릭과 노출이 있는 위치를 찾을 수 있습니다.
# 브랜드가 지정되지 않은 쿼리에서 가져옵니다.

main_df = non_branded_df.merge(
    branded_df, on="방문 페이지", 접미사=("_non_brand", "_branded")
)

그런 다음 열을 수정하여 불필요한 열을 제거합니다.

 # 'main_df' 컬럼을 우리가 필요로 하는 컬럼으로 수정
메인_df = 메인_df[
    [
        "방문 페이지",
        "clicks_non_brand",
        "ctr_non_brand",
        "예배 규칙서",
        "위치 레이블",
        "clicks_branded",
    ]
]

이제 랜딩 페이지의 총 클릭수에 대한 비브랜드 클릭수의 비율을 계산해 보겠습니다.

 # 전체 방문 페이지 클릭에 대한 방문 페이지를 기반으로 비브랜드 쿼리 클릭 비율 계산
main_df.loc[:, "clicks_non_brand_percentage"] = main_df.apply(
    람다 x: x["clicks_non_brand"] / (x["clicks_non_brand"] + x["clicks_branded"]),
    축=1,
)

[전자책] Oncrawl로 SEO 자동화

크롤링이 완료되면 알림을 자동화하여 SEO 문제를 더 쉽게 해결하는 방법을 알아보세요.
전자책 읽기

2. 오가닉 트래픽 수익 로드

GSC 데이터를 검색하는 것과 마찬가지로 GA 데이터를 가져오는 방법에는 여러 가지가 있습니다. "Google Analytics Sheets add-on" 또는 GA API를 사용할 수 있습니다. 이 자습서에서는 단순성 때문에 Google 데이터 스튜디오(GDS)를 사용하는 것을 선호합니다.

GDS에서 GA 데이터를 얻으려면 다음 단계를 따르세요.

  1. GDS에서 새 보고서 또는 탐색기와 테이블을 만듭니다.
  2. 측정기준에는 '방문 페이지'를 추가하고 측정항목에는 '수익'을 추가해야 합니다.
  3. 그런 다음 소스 및 매체를 기반으로 GA에서 맞춤 세그먼트를 만들어야 합니다. 'Google/유기적' 트래픽을 필터링합니다. 세그먼트 생성 후 GDS의 세그먼트 섹션에 추가합니다.
  4. 마지막 단계에서 테이블을 내보내고 " landing_pages_revenue.csv "로 저장합니다.
방문 페이지 수익 CSV 내보내기

방문 페이지 수익 CSV 내보내기

데이터를 로드합시다.

 Organic_revenue_df = pd.read_csv("./data/landing_pages_revenue.csv")

이제 GA 방문 페이지의 URL에 사이트 이름을 추가해야 합니다.

GA에서 데이터를 내보낼 때 방문 페이지는 상대 형식이지만 GSC 데이터는 절대 형식입니다.

GA 방문 페이지 데이터를 확인하는 것을 잊지 마십시오. 작업한 데이터 세트에서 GA 데이터는 매번 약간의 정리가 필요하다는 것을 알았습니다.

 # GA 방문 페이지 URL을 SITE_NAME과 연결합니다.
# 또한 열 이름 바꾸기
Organic_revenue_df.loc[:, "방문 페이지"] = (
    SITE_NAME[:-1] + Organic_revenue_df[organic_revenue_df.columns[0]]
)
Organic_revenue_df.rename(columns={"방문 페이지": "방문 페이지", "수익": "수익"}, inplace=True)

이제 GSC 데이터를 GA 데이터와 병합해 보겠습니다.

 # 이 단계에서는 'main_df'를 비브랜드 쿼리 데이터의 비율이 포함된 'dk_organic_revenue_df' DataFrame과 병합합니다.
main_df = main_df.merge(organic_revenue_df, on="랜딩 페이지", how="left")

이 섹션의 끝에서 DataFrame 열을 약간 정리합니다.

 # 'main_df' DataFrame 정리
메인_df = 메인_df[
    [
        "방문 페이지",
        "clicks_non_brand",
        "ctr_non_brand",
        "예배 규칙서",
        "위치 레이블",
        "clicks_non_brand_percentage",
        "수익",
    ]
]

3. 비 브랜드 수익 계산

이 섹션에서는 데이터를 처리하여 찾고 있는 정보를 추출합니다.

하지만 무엇보다 먼저 " IMPORTANT_DIRECTORIES "를 기반으로 방문 페이지를 필터링하겠습니다.

 # "IMPORTANT_DIRECTORIES"에 포함되지 않은 다른 디렉토리 방문 페이지 제거
main_df = (
    main_df[main_df["디렉토리"].isin(IMPORTANT_DIRECTORIES)]
    .dropna(subset=["수익"])
    .reset_index(drop=True)
)

이제 브랜드가 없는 유기적 수익 트래픽을 계산해 보겠습니다.

나는 우리가 쉽게 계산할 수 없는 메트릭을 정의했고, 그것은 우리가 그것에 숫자를 할당하도록 이끄는 다른 어떤 것보다 더 직관입니다.

" brand_influence " 측정항목은 브랜드의 강점을 보여줍니다. 비브랜드 검색이 비즈니스 매출을 감소시킨다고 생각되면 이 수치를 낮추십시오. 예를 들어 0.8과 같은 것입니다.

 # 브랜드가 너무 강력하여 브랜드 없이 쿼리하는 것이 브랜드로 쿼리하는 것만큼 판매할 수 있다면 1이 좋습니다.
# 검색어에 브랜드 이름이 포함되지 않은 책을 찾는 경우를 생각해 보세요. 아마존을 볼 때 다른 시장이나 상점에서 구매합니까?
브랜드 영향력 = 1
main_df.loc[:, "non_brand_revenue"] = main_df.apply(
    람다 x: x["수익"] * x["clicks_non_brand_percentage"] * brand_influence, 축=1
)

중요한 디렉토리를 기반으로 브랜드가 없는 수익에 대한 통찰력을 얻기 위해 파이 차트를 그려 보겠습니다.

 # 이 셀에서 디렉토리를 기반으로 하는 모든 비브랜드 방문 페이지 수익을 얻고 싶습니다.
non_branded_directory_dist_revenue_df = pd.pivot_table(
    메인_df,
    인덱스 = "디렉토리",
    값=["비브랜드_수익"],
    aggfunc={"non_brand_revenue": "합계"},
)

pie_fig = px.pie(
    non_branded_directory_dist_revenue_df,
    값="non_brand_revenue",
    이름=non_branded_directory_dist_revenue_df.index,
    title="웹사이트 디렉토리를 기반으로 한 비브랜드 수익",
)
pie_fig.update_traces(textposition="inside", textinfo="percent+label")

pie_fig.show()

이 플롯은 IMPORTANT_DIRECTORIES 에 대한 비브랜드 쿼리 분포를 보여줍니다.

비브랜드 쿼리 배포

비브랜드 쿼리 배포

내 CTR 곡선 데이터를 기반으로 5보다 높은 위치에 대한 CTR에 의존할 수 없다는 것을 알았습니다. 이 때문에 위치를 기반으로 데이터를 필터링합니다.

데이터를 기반으로 아래 코드 블록을 수정할 수 있습니다.

 # CTR 곡선의 CTR 정확도 때문에 위치가 5 이상인 방문을 건너뛸 수 있다고 생각합니다. 이 때문에 다른 방문 페이지를 필터링했습니다.
main_df = main_df[main_df["위치 레이블"] < 6].reset_index(drop=True)

4. "클릭당 수익"(RPC) 계산

여기에서 사용자 지정 메트릭을 만들고 "클릭당 수익" 또는 RPC라고 불렀습니다. 이것은 브랜드가 아닌 클릭에서 생성된 각 수익을 보여줍니다.

이 측정항목을 다양한 방식으로 사용할 수 있습니다. RPC는 높지만 클릭수가 적은 페이지를 찾았습니다. 페이지를 확인했을 때 색인이 생성된 지 1주일도 되지 않았으며 다른 방법을 사용하여 페이지를 최적화할 수 있다는 것을 알았습니다.

 # 클릭당 발생하는 수익 계산(RPC: 클릭당 수익)
main_df["rpc"] = main_df.apply(
    람다 x: x["non_brand_revenue"] / x["clicks_non_brand"], 축=1
)

5. 수익 예측!

우리는 끝을 향해 가고 있습니다. 우리는 브랜드가 없는 유기농 수익을 예측하기 위해 지금까지 기다렸습니다.

마지막 코드 블록을 실행해 봅시다.

 # 다른 위치에 따라 수익을 계산하는 주요 기능
인덱스의 경우 main_df.iterrows()의 row_values:
    # 디렉토리 간 전환 CTR 목록
    ctr_curve = 디렉토리_median_ctr_dict[행_값["디렉토리"]]

    # 위치 1에서 5까지 반복하고 CTR의 증가 또는 감소를 기반으로 수익을 계산합니다.
    범위(1, 6)의 i에 대해:
        i == row_values["위치 레이블"]인 경우:
            main_df.loc[인덱스, i] = row_values["non_brand_revenue"]
        또 다른:
            # main_df.loc[인덱스, i + 1] ==
            main_df.loc[인덱스, i] = (
                row_values["non_brand_revenue"]
                * (ctr_curve[i - 1])
                / ctr_curve[int(row_values["위치 레이블"] - 1)]
            )

    # "N to 1" 메트릭 계산. 이것은 순위가 "N"에서 "1"로 올라갈 때의 수익 증가를 보여줍니다.
    main_df.loc[인덱스, "N에서 1"] = main_df.loc[인덱스, 1] - main_df.loc[인덱스, row_values["위치 레이블"]]

최종 출력을 보면 새 열이 있습니다. 이 열의 이름은 "1", "2", "3", "4", "5"입니다.

이 이름들은 무엇을 의미합니까? 예를 들어, 위치 3에 페이지가 있고 위치가 개선될 경우 수익을 예측하거나 순위가 하락할 경우 손실이 얼마나 되는지 알고 싶습니다.

"1"과 "2" 열은 이 페이지의 평균 순위가 향상되었을 때의 페이지 수익을 보여주고 "4"와 "5" 열은 순위가 떨어질 때 이 페이지의 수익을 보여줍니다.

이 예에서 열 "3"은 페이지의 현재 수익을 보여줍니다.

또한 "N to 1"이라는 메트릭을 만들었습니다. 이것은 이 페이지의 평균 위치가 "3"(또는 N)에서 "1"로 이동하는지 그리고 이동이 수익에 얼마나 영향을 미칠 수 있는지 보여줍니다.

마무리

나는 이 기사에서 많은 것을 다루었고 이제 당신이 손을 더럽히고 브랜드가 없는 유기적 트래픽 수익을 예측할 차례입니다.

이것은 우리가 이 예측을 사용할 수 있는 가장 간단한 방법입니다. 이 알고리즘을 더 복잡하게 만들고 일부 ML 모델과 결합할 수 있지만 그렇게 하면 기사가 더 복잡해집니다.

이 데이터를 CSV로 저장하고 Google 시트에 업로드하는 것을 선호합니다. 또는 팀 또는 조직의 다른 구성원과 공유할 계획이라면 Excel로 열고 읽기 쉽도록 열에 색상을 사용하여 서식을 지정합니다.

이 데이터를 기반으로 비브랜드 유기적 트래픽 ROI를 예측하고 협상 프로세스에 사용할 수 있습니다.