Google Search Console の
今回は、
過去の 記事
LinearSVC で
クラス分類する
Google Search Console のキーワードを python sklearn LinearSVC で クラス分類して カテゴリ分けする | Monotalk RandomForestClassifier で
クラス分類する
Google Search Console のキーワードを python sklearn RandomForestClassifier で クラス分類して カテゴリ分けする | Monotalk
前提
入力データ
Search Analytics for Sheets - Google スプレッドシート アドオン で、データを Google スプレッドシートに Export。
Export 後のスプレッドシートを CSV化した データを 入力データと しています。
Search Analytics for Sheets - Google スプレッドシート アドオン の使い方は、
サーチコンソールの詳細データを Googleスプレッドシートに 自動反映させてTableauに インポートする 方法 :: 「清水 誠」公式サイト
が参考に なりました。 学習データ
入力データの一部の キーワードを 切り出し、 別シートに 貼り付け、 人力で 800キーワードくらいを 分類しました。
それを、tsv 出力した ものを 学習データと しています。
以下、学習データと して 作成した tsv
を一部抜粋し テーブル形式に 変換した ものに なります。 Query label_name sonarqube sonarqube no module named python (1_8.w001) the standalone template_* settings were deprecated in django 1.8 django //nosonar sonarqube 404 エラー 404 404エラー 404 404エラーページ 404
検索キーワードの 分類に ついて
ハイボールを
ここでは、
分類、 クラスタリングするとわかる こと
自サイトが
どのような コンテキストで 閲覧されているかを 知れる。
集計結果により、 自サイトが どのような コンテキストで 検索、 閲覧されているのかを 知る ことができます。
狙った分類での 検索数が 少なかったり、 多かったり、 目指す ところと 現実での 差分が わかるのではないかと 思います。 クラスタリングして
認知していなかった 分類を 発見する
自動分類で、今まで 認知していなかった 分類を 発見する ことができます。
自分が伺い 知らぬ コンテキストで 検索、 閲覧されていたなどが わかるのではないかと 思います。
一般的な テキスト分類手法
文書分類 - Wikipedia には、
検索キーワードの 分類手法
検索キーワードの
実学に
Excel マクロ、
手作業での 仕分け の 合わせ 技
以下、記事が 参考に なりました。 キーワードに 対して カテゴリを 紐づけ、 マクロを 駆使して 分類を 実施しています。
検索キーワードを自動分類して“ざっくり”分析する Excelの 秘蔵テクニック 第8回 | 1万円で 真似できる“戦略的サイト運用術” - 小さく 作って 速く 改善 | Web担当者Forum 機械学習での
分類 (Webサービスを 使う)
検索キーワード Machine Learning | Microsoft Azure を使って、 検索キーワードを 分類する 方法の 説明が あります。
【SEO・SEM】 機械学習で キーワードの グルーピングを 自動化 | Core Marketing Blog KMeans クラスタリング での
分類
以前、sklearn の KMeans を 使って、 キーワード分類を してみました。
Google Search Console のキーワードを python で クラスタリングする。 | Monotalk KH Coder に
よる キーワード分類
私は使用したことがないですが、 KH Coder - Wikipediaを 使うと、 共起ネットワーク図や、 クラスタリング等いろいろできるようです。
キーワード分類に scikit-learn を 用いる 前提で、 scikit-learn を ざっくり 知れる わかりやすい 情報
以下、
素人なので、
regression
はdimension reduction
は
キーワード分類 「したい」 人が python 触れるのか ?
一般的に
ディレクションやる
以上、
実装
作った
- search_console_naive_bayes_classsifier.py
# -*- coding: utf-8 - from __future__ import print_function from sklearn.naive_bayes import MultinomialNB from sklearn.feature_extraction.text import CountVectorizer import search_console_classifier_utils as utils import numpy as np def __get_max_label(array, score): index = 0 max_value = 0 for i in range(len(array)): item = array[i] if max_value < item: max_value = item index = i return {score[index]: max_value} def main(): # ---------------------------------------------------------------------------- # 1. 学習データと、サーチコンソールからの取得結果のキーワードをマージ、キーワード内の単語の出現頻度を数えて、結果を素性ベクトル化する。 # ------------------------------------------------------ keywords = [] # 学習データからキーワードを取得 for line in utils.read_from_learning_tsv(0): keywords.append(utils.exclude_stop_words(line)) # CSVからキーワードを取得 for line in utils.parse_report_tsv(): keywords.append(utils.exclude_stop_words(line)) # テキスト内の単語の出現頻度を数えて、結果を素性ベクトル化する(Bag of words) count_vectorizer = CountVectorizer() # csr_matrix(疎行列)が返る feature_vectors = count_vectorizer.fit_transform(keywords) # 学習したデータのみ切り出し learning_vectors = feature_vectors[:len(utils.read_from_learning_tsv(0))] # データに対応したラベルを取得 learning_labels = np.array(utils.read_from_learning_tsv(1)) # ---------------------------------------------------------------------------- # 2. ナイーブベイズ "MultinomialNB" で学習 # ------------------------------------------------------- clf = MultinomialNB() # 学習 clf.fit(learning_vectors, learning_labels) print("--------------------------------") print(clf.score(learning_vectors, learning_labels)) print("--------------------------------") # -------------------------------------- # 3. スコア算出&ラベリング # -------------------------------------- scores = clf.predict_proba( feature_vectors[len(utils.read_from_learning_tsv(0)):]) classes = clf.classes_ labels = [] for score in scores: max_dict = __get_max_label(score, classes) for k, v in max_dict.items(): if v > 0.50: # 0.50 より大きい場合、ラベルを設定 labels.append(k) else: # 上記以外の場合は、"unknown" labels.append("unknown") # スプレッドシート更新 utils.update_labels(labels) if __name__ == '__main__': main()
説明
- 各種ライブラリの
インストール
必要なライブラリを インストールしてください。
gspread
は分類処理自体には 必要ないですが、 Googleスプレッッドシートから データを 取得するのに 必要に なります。
pip install sklearn numpy gspread
search_console_classifier_utils.py に
ついて
Google Search Console のキーワードを python sklearn RandomForestClassifier で クラス分類して カテゴリ分けする | Monotalk に 記載していますので そちらを 参照ください。 1. 学習データと、
サーチコンソールからの 取得結果の キーワードを マージ、 キーワード内の 単語の 出現頻度を 数えて、 結果を 素性ベクトル化する。
Google Search Console のキーワードを python sklearn LinearSVC で クラス分類して カテゴリ分けする | Monotalkと やり方は 一緒なので、 そちらを ご確認ください。 2. ナイーブベイズ “MultinomialNB” で
学習
Google Search Console のキーワードを python sklearn LinearSVC で クラス分類して カテゴリ分けする | Monotalkと 同様の 手順で 解析自体は できてしまいます。
scikit-learn による ナイーブベイズ分類器 - Qiita
INPUTに考えたのですが、 GaussianNB
、BernoulliNB
、MultinomialNB
を卓上理論上使うのが 正しいのか 理解できて おらず、 とりあえず、 何かの sampleコードから 拝借した MultinomialNB
を使って おります。
分類クラスを変える、 かつ、 パラメータを いじると 分類性能は 上がったり、 下がったりするのかと 思います。
新はてなブックマークでも 使われてる Complement Naive Bayesを 解説するよ - 射撃しつつ 前転を 読んだのですが、 なる ほどと 思った ものの 実装には とても 落と しこめず、 奥が 深すぎてとりあえず、 デフォルトで 動かして おります。
定性的に見た 感じだと、 LinearSVC
、RandomForestClassifier
よりもいい 感じに 分類できているように 見えます。 3. スコア算出&ラベリング
こちらは、Google Search Console の キーワードを python sklearn LinearSVC で クラス分類して カテゴリ分けする | Monotalkと 同様なので 割愛します。
手続き的には、LinearSVC
とほぼ 同様で、 APIの クラス名を 変更すれば、 そのまま 動きます。
参考
以下、
まだ、
使う
以上です。
コメント