こんにちは、Habr! この投稿では、新しい職業の研究室が、データ中心のアライアンス企業とともに、ウェブログの処理と分析に専念するいくつかの研究室の作品をどのように構築できたかについてお話したいと思います。 これらのラボは、
ビッグデータスペシャリスト教育プログラムの最初のケースの鍵であり、DMP Facetz.DCAの教室データに基づいています。 私の名前はArtyom Pichuginです。私は彼女のコーディネーターです。

挑戦する
あなたが自動車会社だと想像してください。 車の広告を表示するのは誰ですか? どのサイトですか? それは安価で効果的ですか? 答えは明らかだと思われます。Avitoなどの掲示板だけでなく、会社のWebサイトの自動車購入ページにアクセスするユーザーにとってもそうです。
しかし、これが問題です。まさにこの場所にあり、まさにこれらのユーザー、誰もが広告を表示したい-少数の有名なサイトに対する大きな需要があり、そのようなディスプレイは高価になります! 2番目のオプションがあります:興味のあるユーザー(車の購入ページに座っている)が座っている人気の低いサイトを見つけ、これらのサイトに広告を表示する。 この場合、広告を表示するコストは低くなりますが、コンバージョンは良好なままです。 ある人がまだ車を買うというトピックに目を向けていないが、それについて考えただけで、状況が発生することさえあります-そして彼が最初に目にするのはあなたの提案です!
ログ分析
現在活発な成長を遂げているRTB市場の企業は、同様の問題を解決しています(先日、GetIntentプラットフォームは100万ドルの投資ラウンドを引き付けました。Sberbankは年初にSegmentoプラットフォームを購入しました。 ユーザー情報の収集を担当するRTBプラットフォームの分析コンポーネントは、DMPシステムによって実行されます。 独自のDMPは、RTB企業だけでなく、大量のデータ(銀行、通信、インターネットポータルなど)を持っているすべての人、およびWebログ形式の外部データを購入してデータを充実させたいすべての人にとって必要です。 DMPシステムの基本は、ログに基づいてサイトにアクセスするユーザーに関する大量のデータを処理することです。 これらのログは、多くのパートナーが関与して慎重に収集されます。
免責事項! 以下では、HadoopとPythonを使用してログを処理および分析するための段階的なシナリオについて説明します。これは、DMPシステムの主要コンポーネントの作業を単純化した形で繰り返します。 このシナリオは、新しい職業の研究室でのビッグデータの処理と分析のトレーニング中に使用します。 このシナリオを設計するとき、DMPシステムを構築する特定のビジネスタスクをできるだけ解決するようにしました。 コースの学生は、4〜20台のサーバーのHadoopクラスターで実際のデータを使用してこの作業を実行します。
アクションのシーケンス
それでは、どのようにログを使用して広告の表示を最適化できますか(ユーザーID、URL、タイムスタンプ-退屈は致命的です、見た目だけ)? これを行うには、いくつかの操作を行う必要があります。
指定:数テラバイトのサイトログ。
私たちがすること:- 最も単純なヒューリスティックは、たとえば1週間または2週間でサイトauto.ruにアクセスした回数など、「必要なユーザー」として定義されます。 その結果、適切なユーザーのリストを取得します。
- 現在、各サイトでは、その出席者を適切なユーザーおよび一般的なすべてのユーザーと見なしています。 そして、すべてのサイト訪問者の数からの「正しい」割合。 一部のサイトでは、これは0.01%(ターゲットオーディエンスの少数)であり、約5%(ターゲットオーディエンスの多く)です。
- 計算されたインジケーターの降順にサイトを並べ替え、ターゲットオーディエンスが存在する上位300サイトを選択します。 私たちは彼らの目を通して見ます。
そのようなサイトの上部には、「交通ルールの準備」サイト、自動車学校のサイトがあります。 あなたは言う-これは明らかな結論であり、ウェブログなしで推測できたでしょう。 次に答えます-どれですか? ラダカリーナの広告を掲載する必要があるのは、自動車教習所のどのサイトで、交通ルールの準備ですか フォードフォーカスはどうですか? メルセデスMLはどうですか? この段階で、クライアントに関するより深い知識が必要になりますが、DMPシステムはそれを少しだけ低くします。
ビッグデータツール
この一見単純なタスクを完了するには、ビッグデータツールを使用して、分析用のデータにアクセスできる必要があります。 この場合、データはDMP Facetz.DCAによって提供されました。
- ログはどこかに保存する必要があります-MapReduceがうまく機能するような方法で、HDFSに直接置くことができます。
- これらのログを処理できるようにする必要があります-さまざまなパラメーターで並べ替え、上位100/300/1000サイトを見つけ、トラフィック全体におけるターゲットユーザーのシェアを決定します。 ここでは、すでにMapReduceパラダイムと、次を使用して分散アルゴリズムを記述する機能が必要です。
-フィルタリング(マップのみのジョブ)
-最適化:マップ結合接続(分散キャッシュを使用)
-最適化:コンバイナーアプリケーション(リデューサーの実装要件)
-結合の削減
-検索top-100(単一のレデューサー)
- これはビッグデータだけでなく、大量のデータにとって特に重要になりますが、有能なデータ前処理プロセスを構築する必要があります。
機械学習
前のパートでは、自動車に興味のあるユーザーを特定しました。ユーザーはどの非自明なサイトに座っているのかを見つけました。 それでは、どの広告を表示するかをどのようにして知るのでしょうか? これを行うには、クライアントのプロファイル、年齢、収入レベル、および売り手として私たちにとって重要なその他の特性について詳しく知る必要があります。 もちろん、ビジネスは顧客の社会人口統計プロファイルをよく知っており、顧客のうちどれがKalinaを提供する方が良いか、誰にMercedes MLを提供するかを知っています。
DMPシステムのタスクは、性別、年齢、収入レベルなど、可能な限り多くの「タグ」を使用して、個々のクライアントに関する知識を充実させることです。 (特に、Facetz.DCAシステムは、6億5,000万個の人形の素材で2,000以上のセグメントを区別できます)。 当然、各個人に関する詳細情報はないため、機械学習を使用して高レベルの精度で機能を復元する必要があります。 この段階で、「ロケット科学」の要素が現れます。
プログラムの一環として、学生は最も重要なタスクの1つである、サイトへの訪問のログによってクライアントの性別と年齢を復元します。
それで、最後のタスクに戻ります-数テラバイトのサイト訪問のログが与えられました。
タスク1:ユーザーIDごとに、男性または女性である確率を決定します。
タスク2(追加の複雑さ):特定の顧客の性別と年齢
を予測する。
作業の最初の段階は、データのクリーニングと前処理です。
- 異常な値を扱う
- ゴミを取り除く(技術的な訪問)
- URLを正規化する(たとえば、wwwを使用して、wwwを使用しない)
- 欠落値の処理(タイムスタンプまたはURLが欠落している場合は入力、ユーザーIDが欠落している場合は完全に削除)
2番目の段階は機能エンジニアリングです。
これは、最も興味深く創造的な作業段階です。ソースデータを充実させ、いくつかのプロパティ(「機能」)を追加して、かなり貧弱なデータ形式を解釈できるようにする必要があります。
このレベルでは、多くのアプローチがあり、これを正しく行う方法に関する明確な「トレーニングマニュアル」はありません。 プログラムの学生がこのタスクにどのようにアプローチしたかについてのいくつかのアイデア:
- ドメイン自体を分析し、それによってサイトをグループ化できます。
- ページの説明部分(タイトル、キーワード、メタ記述)をダウンロードして分析できます。
- 最も難しいが、最も深いオプションは、リンクをたどってページのコード全体をダウンロードし、ページの主題を特定することです。
- 別のアプローチは、ユーザーの訪問をチェーン内のサイトにリンクし、遷移のシーケンスのロジックを決定することです。
- モバイルドメイン(m.facebook.com)は別の「機能」になる可能性があり、ユーザーのカテゴリを決定するのにも役立ちます。
これらすべての「機能」が機械学習アルゴリズムの基礎になります。
最後の段階は、機械学習の使用です。
次のステップは、機械学習を適用して問題を解決することです。 最初の問題を解決するには、ターゲット変数を選択する必要があります-特定のユーザーIDのフィールドの分類子の信頼度。 データの前処理と機能エンジニアリングの予備作業を行った各リスナーは、予測モデルを作成し、最終的に各ユーザーのターゲット変数の値を決定します。 このタスクは、従来のバイナリ分類の問題であり、Pythonスタックを使用してプログラム内で解決されます。ほとんどの機械学習アルゴリズムは、たとえば、従来の
scikit-learnライブラリに既に実装されています。 自動検証スクリプトは、
AUCによって分類子の品質を評価します。
さらに複雑なレベルのタスクは、DMPシステムの分析エンジンを開発しているデータサイエンティストの実際のタスクに最も近いものです。 リスナーは、特定の人の性別と年齢のカテゴリについて予測する必要がありました。 両方の変数が正しく予測される場合、このユーザーIDの予測は正しいと見なされます。 同時に、すべてのユーザーに対してではなく、彼らの裁量で50%を選択することができました。 したがって、リスナー自身が予測の信頼度で人々を分類し、次に最良の半分を選択できます。
これは、すべての観測に対して特定のパラメーターを予測しなければならないことが多い通常のアカデミックタスクとの違いの1つです。 ビジネスアプローチでは、広告には費用がかかることを考慮しているため、広告主は費用を最適化し、予測に対する当社の信頼レベルが所定のしきい値を超えている人にのみ広告を表示しようとします。
作業のこの段階は、最も創造的であることが判明し、常識、体系的思考、および意思決定を繰り返し改善する能力の適用を必要とします。
特にリスナーを驚かせたもの:
- 単純なアルゴリズムでも、かなり大きなサンプルで良い結果が得られます
- 前処理+機能エンジニアリング(データに基づいて「機能」を生成)は、ますます複雑なアルゴリズムや予測モデルを構築するよりも重要です。
- 容認できる解決策は簡単な方法で得られますが、予測の精度を高めるには不釣り合いな努力と自明でないアプローチの使用が必要です。