گوگل سالهاست که به ما می گوید که 15٪ از جستجوهایی که هر روز می بینند ، قبلاً آنها را ندیده اند.
اگر در طول 15 سال کار در جستجوی Google چیزی یاد گرفته باشم ، این است که کنجکاوی مردم بی پایان است. ما هر روز میلیاردها جستجو می کنیم ، و 15 درصد از این سeriesالات س onesالاتی است که ما قبلاً ندیده ایم – بنابراین ما روشهایی برای بازگرداندن نتایج برای سeriesالهایی که نمی توانیم پیش بینی کنیم ایجاد کرده ایم.
آنها یاد گرفته اند که حتی در مواردی که نمی توانند آنچه را که مردم جستجو می کنند پیش بینی کنند ، نتایج را بازگردانند.
اکنون ، اهمیت این فرصت را به تصویر بکشید.
اگر کسی نداند این پرس و جوها چیست ، احتمالاً در آنها گزارش نمی شود ابزار تحقیق کلمات کلیدی، و احتمالاً محتوای کمی برای رقابت دارند.
آیا می توانیم چنین درخواست هایی را شناسایی کنیم و برای امیدوارکننده ترین مطالب بنویسیم؟
بیایید بفهمیم!
در اینجا برنامه فنی ما قرار دارد. ما قصد داریم به:
- واکشی داده های جستجوی جستجو به ارزش یک سال از Google Search Console.
- پرسشهای مربوط به آخرین روز داده ها را جدا کرده و مواردی را که قبلاً ناشناخته بودند فیلتر کنید.
- سعی کنید پرسشهای ناشناخته ما را از لحاظ معنایی با سوالات قبلی مطابقت دهید. این به ما کمک می کند تا پتانسیل آنها برای تولید محتوای پر بازدید را تخمین بزنیم.
- پیش بینی ترافیک را انجام دهید تا امیدوار کننده ترین ایده ها را در اولویت قرار دهید.
تبلیغات
ادامه مطلب را در زیر بخوانید
واکشی داده های کنسول جستجوی Google به صورت خودکار
برخی از تنظیمات اولیه برای دسترسی به کنسول جستجوی Google از پایتون باید انجام شود.
ابتدا باید یک فایل client_id.json را بارگیری کنیم تا از کد پایتون به آن ارجاع دهیم:
- Search Console API را در Compute Engine فعال کنید
https://console.cloud.google.com/apis/api/webmasters.googleapis.com/overview?project=&folder=&organizationId=
- اعتبارنامه جدید ایجاد کنید / به من کمک کنید انتخاب کنم (Search Console API ، رابط کاربری دیگر ، داده های کاربر)
https://console.cloud.google.com/apis/credentials/wizard?api=iamcredentials.googleapis.com&project=
- client_id.json را بارگیری کنید
بیایید نصب کنیم این کتابخانه دسترسی به کنسول جستجوی Google را به طرز چشمگیری ساده می کند ،
!pip install git+https://github.com/joshcarty/google-searchconsole
اگر از Google Colab استفاده می کنید ، پرونده client_id.json را بارگذاری کنید.
#upload client_id.json from google.colab import files names = files.upload()
با این خط می توانید نام پرونده را بارگذاری کنید.
filename=list(names.keys())[0]
اکنون ، ما برای احراز هویت با Search Console آماده هستیم
import searchconsole account = searchconsole.authenticate(client_config=filename, serialize="credentials.json", flow="console")
شما باید روی پیوند ارائه شده کلیک کنید ، مراحل تأیید اعتبار را تکمیل کنید و کد ارائه شده را کپی کنید.
با این کار می توانید لیست سایت های موجود را چاپ کنید.
print(account.webproperties)
با استفاده از یکی از خصوصیات وب سایت یکی را انتخاب کنید:
domain_name = "https://www.sitename.com/"
#Insert your domain name below. webproperty = account[domain_name]
این عملکرد ساده می تواند یک خاصیت وب را بگیرد و یک قاب داده pandas را با یک سال کامل داده پرسش بازگرداند.
تبلیغات
ادامه مطلب را در زیر بخوانید
می توانید تعداد روزهای واکشی را تغییر دهید.
در اینجا کدی برای واکشی داده ها و مثالی از خروجی وجود دارد.
df = get_search_console_data (وب خواص)
df.head ()
جداسازی 15٪ سالات ناشناخته
هنگامی که مجموعه داده های جستجوی Search Console خود را واکشی کردیم ، مطمئن شدیم که تاریخ ها را می کشیم ، که به ما امکان می دهد تجزیه و تحلیل های قدرتمند را با سهولت انجام دهیم.
اما ابتدا باید نوع داده ستون تاریخ را تغییر دهیم.
همانطور که در بالا مشاهده می کنید ، به طور خودکار به عنوان یک شی dat از زمان شناسایی نشده است.
کد زیر از عملکرد pandas استفاده می کند to_datetime برای رفع آن
df["date"] = pd.to_datetime(df.date)
اکنون ، می توانید مجموعه داده های ما را کم کنیم و دریابیم که 15٪ از درخواست های ناشناخته هر روز نشان داده می شود.
Google احتمالاً درخواستهای روزانه را با تمام س onesالات شناخته شده قبلی مقایسه می کند.
با توجه به مجموعه داده محدودمان ، ما فقط با سeriesالات مشاهده شده در سال گذشته مقایسه خواهیم کرد.
در اینجا روند ما برای انجام این کار وجود دارد:
- یک قاب داده فیلتر شده ایجاد کنید فقط با آخرین روز داده جمع آوری شده Search Console دو روز طول می کشد تا به روز شود.
- دو مجموعه از درخواست های منحصر به فرد ایجاد کنید: یکی با سeriesالات آخرین روز و دیگری با سeriesالات باقیمانده در سال گذشته.
- مجموعه جدیدی از پرس و جوهای ناشناخته ایجاد کنید با محاسبه تفاوت بین مجموعه داده های قبلی.
آخرین روز داده در مجموعه داده من 7 نوامبر است.
با جستجوی تاریخ های بیشتر از 6 نوامبر ، می توانم فریم داده را فیلتر کنم.
فوق العاده ساده!
df[df["date"] > "2020-11-6"]
این 5k ردیف داده پرس و جو را برمی گرداند.
می توانم از همین رویکرد برای دریافت مجموعه داده دیگری با بقیه سeriesالات استفاده کنم.
تبلیغات
ادامه مطلب را در زیر بخوانید
rest_of_queries = df[df["date"] < "2020-11-6"]["query"]
من 180 مجموعه درخواست در مجموعه داده خود دارم.
محاسبه نمایش داده های ناشناخته با استفاده از بسیار ساده است مجموعه های پایتون.
fiften_percent = set(last_day_queries) - set(rest_of_queries)
وقتی کلمات کلیدی را شمردم ، فقط 212 را پیدا کردم که کمتر از 4٪ از درخواستهای روز است.
این 15٪ نبود ، اما تعداد س ofالات برای یافتن ایده های محتوای جدید کافی است.
سایتی که من این تجزیه و تحلیل را در آن قرار دادم یک سایت بزرگ غیرانتفاعی است و بررسی دستی سوالات ناشناخته جالب بود.
در اینجا برخی از الگوهای جستجوی من کشف شده است.
- سeriesالات مربوط به نام های تجاری که به نظر می رسد اخیراً باز شده اند یا اخیراً مورد توجه قرار گرفته اند.
- به نظر می رسد برخی اخبار محور هستند.
- شرایط جدید در جهان
بیایید سه پرسش مثال را مرور کنیم.
وضعیت جدید در جهان
تجارت جدید؟
Google این جستجوی من را در جستجوی من پیدا نکرد ، اما ببینید Google چگونه تشخیص داده است که این یک جستجوی محلی است.
شاید ، تجارت در موقعیت جغرافیایی دیگری باشد.
اخبار محور 
به نظر من این یکی جالب بود
تبلیغات
ادامه مطلب را در زیر بخوانید
شما می توانید در SERPs گزارش خبری 3 نوامبر را با اشاره به کمک های مالی کمتر در سال قبل از میلاد مشاهده کنید
منطقی است که جستجوها برای کسب اطلاعات بیشتر در مورد آن افزایش می یابد.
آیا می بینید که چگونه این روش می تواند به کشف فرصت های محتوای جدید کمک کند؟
چیزهای واقعا قدرتمند!
از لحاظ معنایی تطابق سeriesالات
بنابراین ، ما تعدادی پرس و جو جدید و ایده های محتوای مربوطه داریم.
اما ، ما عملکرد تاریخی برای اندازه گیری هر فرصت نداریم.
از آنجا که این پرس و جوها به طور بالقوه قبلاً هرگز مشاهده نشده اند ، بعید است در ابزارهای کلمات کلیدی نشان داده شوند.
چگونه می دانیم کدام یک را اولویت بندی کنیم؟
در اینجا یک تکنیک هوشمندانه وجود دارد که می توانیم آن را امتحان کنیم.
ما قصد داریم از او ایده بگیریم این پست تجزیه و تحلیل ثبت اختراع از سنسی بیل اسلاوسکی.
حق ثبت اختراعاتی که او در مورد آنها بحث می کند صحبت می کند س quالات متعارف.
س quالات متعارف بیانگر این است که روشهای تکراری برای نوشتن همان جستجو وجود دارد.
در حالی که حق ثبت اختراع بر تکثیر نحوی متمرکز است ، ما می توانیم مفهوم را گسترش دهیم و تکثیر معنایی را نیز در نظر بگیریم.
نمایشگرهایی که معنی یکسانی دارند اما با استفاده از کلمات مختلف بیان می شوند.
تبلیغات
ادامه مطلب را در زیر بخوانید
بیل حق ثبت اختراع دیگری را نیز تحت پوشش قرار داد که این رویکرد را در پیش می گیرد.
اما ، چگونه می توانیم آن را بررسی کنیم؟
البته با استفاده از یادگیری ماشینی! 🤓
شباهت متنی معنایی یک مفهوم پیشرفته است ، اما من عاشق تجسم و توضیح ساده در آن هستم این مقاله.
این نشان می دهد که یک روش برای یافتن سeriesالات / س similarالات مشابه ، مطابقت دادن آنها با پاسخ های آنها است.
اگر پاسخ دائماً یکسان باشد ، به احتمال زیاد ما س questionsالاتی معادل می پرسیم!
تبلیغات
ادامه مطلب را در زیر بخوانید
حال ، بیایید این ایده را به کد پایتون ترجمه کنیم.
ابتدا نصب کنیم این کتابخانه مفید.
!pip install sentence-transformers
ما می توانیم یک مدل با چند خط کد بسازیم.
from sentence_transformers import SentenceTransformer, util model = SentenceTransformer('distilbert-base-nli-stsb-mean-tokens')
هنگامی که ما یک مدل را پیدا کردیم ، با دنبال کردن روند زیر ، س quالات معنایی مشابهی پیدا خواهیم کرد:
- پرسشها / جملات را به تعبیه شده تبدیل کنید (اعدادی که محاسبات مجاورت را ساده می کنند)
- نمرات مجاورت را بین جفت س quالات محاسبه کنید.
- نزدیکترین مسابقات را براساس آستانه برشی که می توانیم بصورت تجربی تعیین کنیم فیلتر کنید.
در تصویر بالا ، می توانید ببینید که این تکنیک تطبیق چقدر قدرتمند است.
“فیلم جدید بسیار جذاب است” و “فیلم جدید بسیار عالی است” با 0.98 کاملاً مطابقت دارند.
تبلیغات
ادامه مطلب را در زیر بخوانید
بالاترین امتیاز 1 است.
این کد برای انجام این کار با س quالات ما است.
ابتدا تعبیه ها را ایجاد می کنیم.
fifteen_percent_list = list(fifteen_percent)
#Compute embedding for both lists embeddings1 = model.encode(fifteen_percent_list, convert_to_tensor=True)
# try on a smaller set of 10k, as it takes too long to run on full set of queries rest_of_queries_list = list(set(rest_of_queries))[:10000]
embeddings2 = model.encode( rest_of_queries_list, convert_to_tensor=True)
در مرحله بعدی ، ما می خواهیم پرسش های معنایی مشابهی را در لیست تاریخی پیدا کنیم که مطابقت نزدیک با پرس و جوهای جدید ناشناخته داشته باشد.
#Compute cosine similarities cosine_scores = util.pytorch_cos_sim(embeddings1, embeddings2)
سرانجام ، این کد برای فیلتر کردن سوالات مشابه است.
#Output the pairs with their score for i in range(len(fifteen_percent_list)): score = cosine_scores[i][i] if score > 0.7: print(f"{i}. {fifteen_percent_list[i]} <> {rest_of_queries_list[i]} nScore: {score:.4f}")
من فقط قادر به بررسی 10،000 سوال بودم و هیچ تطابقی بالاتر از 0.5 نبود.
بعداً با مجموعه داده کامل سعی خواهم کرد و نتیجه را در توییتر گزارش خواهم کرد.
لطفا در صورت تمایل گزارش دهید آنچه را که در آزمایشات خود بدست آورده اید.
اولویت بندی بیشتر امیدوار کننده ترین ایده ها
وقتی س Iالات ناشناخته را بصری بازرسی کردم ، چند الگوی جالب پیدا کردم که ارزش بررسی بیشتر را دارد.
یکی در مورد ایده های جمع آوری سرمایه و دیگری در مورد [no-profit] نزدیک من.
بیایید از یک روش داده محور برای ارزیابی تأثیر احتمالی هرکدام با تجسم و پیش بینی استفاده کنیم.
ابتدا ، من می خواهم دو قاب داده فیلتر شده ایجاد کنم که در آن کوئری شامل کلمه کلیدی الگو باشد.
ideas_df = df[df['query'].str.contains("idea")]
near_me_df = df[df['query'].str.contains("near me")]
ما قصد داریم ستون تاریخ را به عنوان شاخص فریم داده تنظیم کنیم.
تبلیغات
ادامه مطلب را در زیر بخوانید
این به ما امکان می دهد گروه بندی پیشرفته را براساس روزها یا ماه ها انجام دهیم.
ideas_df = ideas_df.set_index("date")
near_me_df = near_me_df.set_index("date")
می بینید که تاریخ دیگر در لیست ستون ها موجود نیست.
بیایید هر دو مجموعه داده را براساس ماه گروه بندی کرده و تجسم کنیم.
در اینجا کد مجموعه داده “ایده ها” آورده شده است.
grouped_ideas_df = ideas_df.groupby(pd.Grouper(freq='M')).sum()[["clicks", "impressions"]]
من یک کلاس قدرتمند پانداها را با حروف برجسته برجسته کردم ، Grouper ، که گروه بندی پیشرفته را براساس تاریخها امکان پذیر می کند.
م مخفف فرکانس پایان ماه است.
تبلیغات
ادامه مطلب را در زیر بخوانید
ما همچنین استفاده می کنیم د، که مخفف فرکانس روز تقویم است.
می توانید لیست های مستعار فرکانس لیست زمانی سری کامل را پیدا کنید اینجا.
حال ، بیایید مجموعه داده ها را ترسیم کنیم تا عملکرد تاریخی آنها را ببینیم.
ما قصد داریم از طرح نقشه کتابخانه برای انجام این.
import plotly.express as px
fig = px.line(grouped_ideas_df, y="clicks", title="Clicks over Time for Ideas")
fig.show()
این طرح برای س quالات نزدیک من است.
این تجسم ها افزایش تقاضای واضح برای هر دو فرصت را نشان می دهد ، اما ما می توانیم بهتر عمل کنیم و سعی کنیم پیش بینی کنیم تا ببینیم تأثیر آینده چه خواهد بود.
نقاط داده ماهانه برای ساخت مدل های پیش بینی بسیار کم است.
تبلیغات
ادامه مطلب را در زیر بخوانید
بیایید فرکانس را به روزها افزایش دهیم.
اینجاست که نمودارها با داده های روزانه چگونه به نظر می رسند.
هنگامی که مجموعه داده ها را براساس روز گروه بندی کردیم ، می توانیم از کتابخانه پیامبر فیس بوک برای چند روز کلیک در آینده کلیک کنید.
ما می خواهیم از کدهای اخیر Python Twittorial از تیم من استفاده کنیم.
ما با دیگری برگشتیم #RSTwittorial پنج شنبه! 🙌 امروز ما در حال یادگیری پیش بینی کلیک ها با استفاده از هستیم Googleاست # کنسول جستجو داده
در اینجا خروجی است pic.twitter.com/KodfdEWB2e
– RankSense (RankSense) 22 اکتبر 2020
تبلیغات
ادامه مطلب را در زیر بخوانید
ما فقط باید ستون ها را تغییر نام دهیم تا با آنچه از کتابخانه انتظار می رود مطابقت داشته باشد.
dft = grouped_ideas_df.reset_index().rename(columns={"date":"ds", "clicks":"y"})
ما می توانیم مدل پیش بینی را با دو خط آموزش دهیم.
m = Prophet() m.fit(dft)
پس از آموزش مدل ، می توانیم 30 روز آینده را با این روش پیش بینی کنیم.
#Predicting clicks for the next 30 days. future_30 = m.make_future_dataframe(periods=30) forecast_30 = m.predict(future_30)
سرانجام ، می توانیم پیش بینی خود را برای مجموعه داده ایده های جمع آوری کمک مالی تجسم کنیم.
#Visualizing the prediction for next 30 days. plot_plotly(m, forecast_30, xlabel="Date", ylabel="Clicks")
نقاط سیاه نشان دهنده نقاط واقعی داده است.
خط آبی تیره نقطه میانی پیش بینی ها و نوار آبی روشن عدم قطعیت است.
تبلیغات
ادامه مطلب را در زیر بخوانید
می بینید که مدل سعی دارد تا آنجا که می تواند در الگو قرار بگیرد ، اما در حوالی ماه مه مناسب نیست.
امسال بسیاری از موارد غیرقابل پیش بینی بوده اند ، بنابراین جای تعجب نیست.
در عمل ، حداقل دو سال یک مجموعه داده داشته باشید ، پیش بینی ها به طرز چشمگیری بهبود می یابند.
مرحله آخر پیش بینی ترافیک چندین ایده کاندیدا ، جمع بندی آن و رتبه بندی ایده ها بر اساس بهترین پتانسیل ترافیک است.
منابع برای کسب اطلاعات بیشتر
بهترین راه برای یادگیری انجام دادن است. شما یک نوت بوک Google Colab با تمام مراحل من پیدا کردم اینجا.
من شما را تشویق می کنم آن را امتحان کنید و آنچه را که با من می آموزید گزارش دهید در توییتر 🐍🔥