PythonとGA4で検索トラフィックを予測する方法
公開: 2021-04-26検索エンジン最適化(SEO)に焦点を当てた戦略では、データ分析が不可欠です。 この分野では、オーガニック検索トラフィックの分析でキャリアを伸ばすことを選択するスペシャリストがますます増えています。このトラフィック自体は、有料検索、メール、オーガニックソーシャル、ダイレクトなど、他のトラフィックとはまったく異なる行動と特殊性を持っています。この感覚と今日利用可能な幅広いツールのおかげで、この種の研究はほんの数年前と比較して想像を絶する程度に進化することができました。
この大きな前進は、主に、複雑な数学的操作に依存することなく分析モデルを生成することを可能にした新しい方法論と開発の出現によるものです。 幸運なことに、すでにテストされた手法とアルゴリズムを自由に使用でき、それらを使用して作業を開始する準備ができています。
以下の記事では、計算された傾向が季節性と以前の周期性に調整される時系列のデータセットの予測モデルの作成に焦点を当てます。 具体的には、Google Analytics 4(以下GA4)から物件のオーガニック検索トラフィックを予測します。 これを実行するための多くのオプションがありますが、この特定のケースでは、開発を完全にPythonで実行することにしました。
この記事の基になっているスクリプトは、明確に区別された3つの部分で構成されています。
- データ抽出。 新しいGA4APIを段階的に使用して、オーガニック検索トラフィックを収集する方法。
- データモデリング。 FacebookのオープンソースライブラリであるProphetを使用して時系列予測を行います。
- データの視覚化。 傾向の変化とモデル化された予測を表示します。
Pythonを使用したAPIによるGA4データ抽出
Google Analytics Data API(GA4)を扱うときに最初に知っておく必要があるのは、GA4がその開発ステータスであるということです。 グーグルがそのページで詳述しているように、それは現在初期段階のバージョンにあります。 具体的には、この記事が書かれた日付の時点で、まだベータ段階です。
GA4は2020年10月14日に公開されたことに注意してください。ほんの数か月しか経過していません。 実際、Universal Analyticsプロパティを既に持っていて、新しいGA4プロパティを作成した人は、制限なしに両方のバージョンを並べて使用し続けることができます。 UniversalAnalyticsのプロパティがいつ機能しなくなるかは定かではありません。 いずれにせよ、私の推奨事項は、GA4タイプの新しいプロパティをできるだけ早く作成することです。 このようにして、より広範なデータ履歴が得られます。 GA4を通過する毎日は、新しい機能を統合したり、既存の機能を改善したりすることも考慮する必要があります。 現在、それは絶え間ない進化を遂げています。
このため、もちろん、以下に説明するコードに小さな変更がある場合があります。 確かに、それらは最小限になります。 例として、 RunReportRequest()クラス内でフィールド「entity」(アルファフェーズ)の名前を「property」(ベータフェーズ)に変更するなど、ちょっとした些細なことをすでに経験しました。
何よりもまず、APIリクエストを作成する前に、使用可能な要素を理解する必要があります。 基本的には、以下の構造に従うことがすべてです。
GA4 Data v1BetaAPIのRunReportRequestのタイプ
現実はかなり異なりますが、一見すると非常に直感的です。 リクエストを行うには、少なくとも次のドキュメントを常に手元に用意しておく必要があります。
- GoogleAPIS開発者
- Google Analytics Data API(GA4)のレポート。
これは、フィールド名がJSON形式でフィールドを表す公式ドキュメントとわずかに異なるためです。 例として、Filterクラスのフィールドフィールド名があります。 Pythonでは、field_nameとして記述する必要があります。 良い一般的なルールは、常にキャメルケースタイプのフィールド(「fieldName」など)からスネークケース(「field_name」など)に移行することです。
続行する前に、プロジェクトを初期化するために少し一時停止しましょう。 Pythonでスクリプトを開発する場合のほとんどの場合と同様に、必要なライブラリのインポートと実行環境の準備に時間を費やす必要があります。
- Pythonで新しいプロジェクトを作成します。 この場合、PyCharmソフトウェアが使用されています。
- GoogleCloudPlatformでGoogleAnalyticsData APIを有効にし、作成したサービスアカウントファイル(JSONタイプ)をダウンロードして、Pythonプロジェクトが作成されたフォルダーに保存します。 このファイルを開くときに、client_emailフィールドの値をコピーする必要があります。これは[email protected]のようになります。
- このclient_email値を、データの抽出元のGA4プロパティに追加します。 これは、ユーザー管理セクションで行う必要があります。 少なくとも、許可レベル「読み取りと分析」を付与する必要があります。
- クライアントターミナル(PyCharm)を介して、APIリクエストが行われるプロジェクトディレクトリにGoogleアナリティクスデータライブラリをインストールします。
pip install google-analytics-data
これからは、リクエストを作成するだけです。リクエストは、以下に示すように、基本的に3つの部分(クライアント、リクエスト、レスポンス)で構成され、収集されたデータを表示または保存します。
GA4に簡単なリクエストを行うためのコード
リクエスト変数に追加されたディメンション、指標、フィルター、データの順序、日付範囲などは、変数( metrics = [Metric(..)]にリンクされたクラス(前の画像「RunReportRequestのタイプ」を参照)として追加する必要があります。 )。 これにより、収集されるデータの構造をはるかに理解しやすくなります。 この意味で、最高レベルのクラスごとに、特定のインポートを実行する必要があります。 つまり、特定の時間範囲のディメンションと指標を追加する場合は、少なくとも次のオブジェクトが必要になります…
google.analytics.data_v1betaからインポートBetaAnalyticsDataClient google.analytics.data_v1beta.typesからインポートRunReportRequest google.analytics.data_v1beta.typesからインポートDateRange google.analytics.data_v1beta.typesからディメンションをインポート google.analytics.data_v1beta.typesからインポートメトリック
もちろん、特定の変数に特定の値を追加することも可能です( name ='eventCount' )。 このため、前述のドキュメントを理解して理解することが不可欠です。
これに加えて、ステップ2で以前にダウンロードしたファイルへのパスを含む変数os.environ [“ GOOGLE_APPLICATION_CREDENTIALS”]に特別な注意を払う必要があります。このコード行は、 GoogleAPI。
コードが正しく実行された場合、次のような結果が表示されます: {Date、Events}、{20210418、934}、{…}、…。
オンクロールデータ³
FacebookProphetによるデータ予測
現在、データ履歴に基づいてあらゆるタイプの予測を実行するための無料の既存のオプションが多数あります。 この特定のケースでは、私はProphetライブラリを選択しましたが、実際には何ですか?
これは、Facebookのデータサイエンスチームによって作成されたオープンソースライブラリ(RおよびPythonで利用可能)であり、非線形トレンドが毎日の季節性、毎週および毎年の季節性に調整される加法モデルに基づいて時系列データセットの動作を推定します休暇日の影響を考慮に入れます。
提案された実装(有機検索トラフィック予測)に戻ると、最初に行うことは、次のライブラリをインストールすることです。
- パンダ( pip install pandas )。 データ構造を管理および分析します。
- Plotly( pip install plotly )。 あらゆる種類のグラフィックの作成。
- 預言者( conda install -c conda-forge fbprophet -y )。
次に、いつものように、これらのライブラリに関連付けられたインポートを実行する必要があります。 この後、あなたがしなければならないのは、予測のモデリングとそれに対応する視覚化を実行することだけです。 これを行うには、預言者の場合、次のプロセスに従う必要があります。
- 予測を生成するために、必要な属性を使用して新しいProphetオブジェクトを初期化します。
- GA4から抽出したデータをデータフレームとして渡して、fitメソッドをリクエストします。 このリクエストには、場合によっては数秒かかることがあります。 収集されたデータを含むデータフレームは、名前が常に同じである2つの列(ds(日付タイプフィールド)とy(調査するメトリック))のみで構成されている必要があります。
- 選択した日付範囲から予測が到達するまでの期間数と、データが集約される頻度(毎週、毎月など)を設定して、新しい将来のデータフレームを作成します。
- 新しい将来のデータフレームの各行に予測値(yhat)を割り当てるpredictメソッドを要求します。
- 生成された予測を表示できるようにplotメソッドを要求します。
- データの傾向と季節性を視覚的に理解するのに役立つplot_componentsメソッドをリクエストします。
m = Prophet() m.fit(df) future = m.make_future_dataframe(periods = 365) 予測=m.predict(future) m.plot(予測) m.plot_components(予測) plt.show()
目的の予測はわずか6つのステップで生成されており、比較的単純に見えますが、予測を生成するための鍵となるいくつかの要素を考慮する必要があります。 それらはすべて、何らかの形で予測の妥当性に影響を与えます。 結局のところ、この記事の場合、オーガニック検索トラフィックのロジックに準拠した予測を生成することです。 このためには、預言者のいくつかのより高度な設定を理解する必要があります。
- 特別な日と休暇。 特別な日を追加する可能性があります。
- 外れ値。 それらが見積もりに影響を与える場合は、それらを排除する必要があります。
- チェンジポイント。 分析された時間にわたる傾向変化の検出。
- 診断。 データの履歴調査による予測誤差の測定に基づく検証。
- 増加。 線形またはロジスティックの間の選択。
- 季節性。 加法または乗法の選択。
これらすべておよびその他の多くのオプションは、Prophetライブラリのこのドキュメントで完全に詳しく説明されています。
トラフィック予測を視覚化できるようにするための完全なスクリプトの作成
残っているのは、パズルのすべてのピースを1つのスクリプトに結合することだけです。 このタイプのパズルに取り組む通常の方法は、以前に詳細に説明した各プロセスの関数を作成して、それらを整然としたクリーンな方法で実行できるようにすることです。
def ga4(property_id、start_date、end_date): […] def Forecasting(dim、met、per、freq): […] __name__ == "__main__"の場合: ディメンション、メトリック= ga4(PROPERTY_ID、START_DATE、END_DATE) 予測(ディメンション、メトリック、期間、FREQ)
予測の最終結果を視覚化する前に、分析されたオーガニック検索トラフィックを確認することをお勧めします。
一見すると、実行されたさまざまな戦略とアクションが時間の経過とともにどのように影響したかがわかります。 他のチャネル(たとえば、有料検索キャンペーン)とは異なり、Organic Searchから生成されたトラフィックには、通常、感知できるほどの変動(谷またはピーク)がほとんどありません。 時間の経過とともに徐々に成長または減少する傾向があり、季節的なイベントの影響を受けることもあります。 通常、顕著な変動は、検索エンジンアルゴリズム(Google、Bingなど)の更新に関連しています。
スクリプトの出力は、トレンド、季節性、予測、データ頻度などの重要な要素が詳細に示されている次の画像で確認できます。
得られた予測を分析すると、「これまでと同じSEO戦略を継続すれば、検索エンジンからのトラフィックは徐々に増加し続ける」と一般的に結論付けることができます。 「ウェブサイトのパフォーマンスの向上、高品質のコンテンツの生成、関連リンクの提供などの取り組みは、それだけの価値があります」と確信できます。
トレンド、季節性と予測、オーガニック検索トラフィックのトレンドを視覚化する
結論として、コード全体を共有するので、コードをコピーしてPythonのIDE(統合開発環境)で実行するだけで済みます。 言うまでもなく、これを正しく実行するには、上記のすべてのライブラリがインストールされている必要があります。
パンダをpdとしてインポートします fbprophetをインポートする fbprophetからimportProphet fbprophet.plotからインポートadd_changepoints_to_plot matplotlib.pyplotをpltとしてインポートします OSのインポート google.analytics.data_v1betaからインポートBetaAnalyticsDataClient google.analytics.data_v1beta.typesからインポートDateRange google.analytics.data_v1beta.typesからディメンションをインポート google.analytics.data_v1beta.typesからインポートメトリック google.analytics.data_v1beta.typesからインポートフィルター google.analytics.data_v1beta.typesからimportFilterExpression google.analytics.data_v1beta.typesからimportFilterExpressionList google.analytics.data_v1beta.typesからインポートRunReportRequest 財産_ START_DATE = '2020-01-01' END_DATE = '2021-03-31' 期間=4 FREQ ='M' os.environ ["GOOGLE_APPLICATION_CREDENTIALS"]="[ここに資格情報を含むjsonファイルのパスを追加]" def ga4(property_id、start_date、end_date): client = BetaAnalyticsDataClient() request = RunReportRequest(property ='properties /'+ property_id、 寸法=[寸法(名前='日付')]、 メトリック=[メトリック(名前='eventCount')]、 date_ranges = [DateRange(start_date = start_date、 end_date = end_date)]、 Dimensions_filter = FilterExpression( and_group = FilterExpressionList(expressions = [ FilterExpression(filter = Filter(field_name ='sessionDefaultChannelGrouping'、 string_filter = Filter.StringFilter( value ='有機検索'、 match_type = Filter.StringFilter.MatchType( 1))))、 FilterExpression(filter = Filter(field_name ='eventName'、 string_filter = Filter.StringFilter( value ='session_start'、 match_type = Filter.StringFilter.MatchType( 1))))) ])) )。 response = client.run_report(request) x、y =([] for i in range(2)) response.rowsの行の場合: x.append(row.dimension_values [0] .value) y.append(row.metric_values [0] .value) print(row.dimension_values [0] .value、row.metric_values [0] .value) x、yを返す def Forecasting(x、y、p、f): print('Prophet%s'%fbprophet .__ version__) data = {'ds':x、'y':y} df = pd.DataFrame(data、columns = ['ds'、'y']) m = Prophet(growth ='linear'、 changepoint_prior_scale = 0.5、 Seasonality_mode ='additive'、 daily_seasonality = False、 weekly_seasonality = True、 yearly_seasonality = True、 休日=なし、 )。 m.fit(df) future = m.make_future_dataframe(periods = p、freq = f) 予測=m.predict(future) print(forecast [['ds'、'yhat'、'yhat_lower'、'yhat_upper']]。head()) fig = m.plot(forecast、xlabel ='Date'、ylabel ='Visits') add_changepoints_to_plot(fig.gca()、m、forecast) m.plot_components(予測) plt.show() __name__ == "__main__"の場合: channel_group、event_count = ga4(PROPERTY_ID、START_DATE、END_DATE) 予測(channel_group、event_count、PERIODS、FREQ)
この記事がインスピレーションになり、次のプロジェクトで大いに役立つことを願っています。 このタイプの実装について引き続き学習したい場合、またはより技術的なデジタルマーケティングについて詳しく知りたい場合は、私に連絡してください。 以下の私の著者プロフィールでより多くの情報を見つけることができます。