ゼファーネットのロゴ

Scalaを使用したデータ分析

日付:

Scalaを使用したデータ分析

データ分析に適切なツールを選択することは非常に重要です。 国際的なデータサイエンスコンテストが開催されるKaggleフォーラムでは、どちらのツールが優れているかをよく尋ねられます。 RとPythonがリストの一番上にあります。 この記事では、Scalaに基づくデータ分析テクノロジーの代替スタックについて説明します。


By ローマン・ジコフ、創設者/データサイエンティスト@ TopDataLab

データ分析に適切なツールを選択することは非常に重要です。 に Kaggle.com 国際的なデータサイエンスコンテストが開催されるフォーラムでは、どちらのツールが優れているかをよく尋ねられます。 RとPythonがリストの一番上にあります。 この記事では、Scalaプログラミング言語とに基づくデータ分析テクノロジーの代替スタックについて説明します。 スパーク 分散コンピューティングプラットフォーム。

どうやって思いついたのですか? Retail Rocketでは、非常に大きなデータセットに対して多くの機械学習を行っています。 以前は、IPython + Pyhs2(Pythonのハイブドライバー)+ Pandas + Sklearnを使用してプロトタイプを開発していました。 2014年の夏の終わりに、同じサーバーパークでパフォーマンスが3〜4倍向上することが実験で示されたため、Sparkに切り替えるという基本的な決定を下しました。

もう4つの利点は、本番サーバーで実行されるモデリングとコードにXNUMXつのプログラミング言語を使用できることです。 以前はHive、Pig、Java、PythonのXNUMXつの言語を同時に使用していたため、これは私たちにとって大きなメリットでした。 これは、エンジニアの小さなチームにとっては問題です。

Sparkは、APIを介したPython / Scala / Javaの操作を適切にサポートします。 Sparkが書かれている言語であるため、Scalaを選択することにしました。これは、ソースコードを分析し、必要に応じてバグを修正できることを意味します。 これは、Hadoopが実行されるJVMでもあります。

当時、チームの誰もScalaを知らなかったので、選択は簡単ではなかったと言わなければなりません。
言語でうまくコミュニケーションをとることを学ぶためには、その言語に没頭し、それを可能な限り使用する必要があることはよく知られている事実です。 そのため、モデリングと高速データ分析のためにScalaを優先して、Pythonスタックを放棄しました。

最初のステップは、IPythonノートブックの代替品を見つけることでした。 オプションは次のとおりです。

  1. Zeppelin –Spark用のIPythonのようなノートブック。
  2. イスパーク;
  3. スパーク ノートブック;
  4. IBMのSparkIPythonNotebook。
  5. アパッチ Tオリー

これまでのところ、選択はシンプルであるためISparkでした。これは、Scala / Spark用のIPythonです。 HighChartsとRグラフィックスを追加するのは比較的簡単です。 そして、それをYarnクラスターに接続することに問題はありませんでした。

仕事

 
質問に答えてみましょう:オンラインストアの平均購入額(AOV)は、決済、ブラウザーの種類(モバイル/デスクトップ)、オペレーティングシステム、ブラウザーのバージョンなどの静的な顧客パラメーターに依存しますか? あなたはこれを行うことができます 相互情報.

推奨アルゴリズムと分析にはエントロピーを多用します。古典的なシャノンの公式、カルバック・ライブラー発散、相互情報量です。 このトピックに関する論文も提出しました。 マーフィーの有名な機械学習の教科書には、これらの対策について説明した、小さいながらも別のセクションがあります。

実際の小売ロケットデータで分析してみましょう。 事前に、サンプルをクラスターからコンピューターにcsvファイルとしてコピーしました。

且つ

 
ここでは、ローカルモードで実行されているISparkとSparkを使用します。これは、すべての計算がローカルで実行され、プロセッサコア間で分散されることを意味します。 すべてはコードへのコメントで説明されています。 最も重要なことは、出力でRDD(Sparkデータ構造)を取得することです。これは、コードで定義されているRow型のケースクラスのコレクションです。 これにより、「。」を介してフィールドを参照できます(例:_。categoryId)。

上記の行は、バージョン1.3.0でSparkに追加された新しいDataFrameデータ型を使用しています。これは、Pythonのpandasライブラリの同様の構造に非常によく似ています。 toDfはRowケースクラスを取得するため、フィールドを名前で参照できます。

さらに分析するには、できれば大量のデータを含む単一のカテゴリを選択する必要があります。 これを行うには、最も人気のあるカテゴリのリストを取得する必要があります。

理論的には、Wispでサポートされている限り、任意のHighChartsグラフを使用できます。 すべてのチャートはインタラクティブです。

同じことをやってみましょうが、Rを使用します。

Rクライアントを実行し、charをプロットします。

相互情報

 
グラフは関係があることを示していますが、メトリックはこの結論を確認しますか? これを行うには多くの方法があります。 この場合、テーブルの値の間で相互情報量を使用します。 これは、XNUMXつのランダム(離散)変数の分布間の相互依存性を測定します。

離散分布の場合、次の式を使用して計算されます。

しかし、私たちはより実用的な測定基準に興味があります– 最大情報係数 (MIC)これは連続変数に対していくつかのトリッキーな計算を必要とします。 このパラメータの定義は次のようになります。

D =(x、y)を確率変数XおよびYの要素のn個の順序対のセットとします。このXNUMX次元空間は、XおよびYグリッドによって分割され、xおよびy値をそれぞれXおよびYパーティションにグループ化します(ヒストグラムを覚えておいてください!)。

ここで、B(n)はメッシュサイズ、I ∗(D、X、Y)はXパーティションとYパーティションの相互情報量です。 分母は対数を指定します。これは、MICをセグメント[0、1]の値に正規化するのに役立ちます。 MICは、[0,1]の間隔で連続値を取ります。極端な値の場合、依存関係がある場合は1、依存関係がない場合は0です。 このトピックについて他に読むことができるものは、記事の最後の参考文献のリストに記載されています。

   (機械学習:確率論的視点)は、MIC(相互情報量)を21世紀の相関関係と呼んでいます。 そして、これが理由です! 以下のグラフは、6つの依存関係(CからHのグラフ)を示しています。 ピアソンの相関とMICが計算されており、左側のグラフに対応する文字でマークされています。 ご覧のとおり、ピアソン相関はほぼゼロですが、MICは相関を示しています(グラフF、G、E)。

出典:Reshef、DN、YA Reshef、HK Finucane、SR Grossman、G。McVean、PJ Turnbaugh、ES Lander、M。Mitzenmacher、およびPC Sabeti 「大規模なデータセットでの新しい関連の検出」。

 

次の表は、ランダム、線形、XNUMX次など、さまざまな依存関係で計算されたいくつかのメトリックを示しています。この表は、MICが非常に適切に動作し、非線形の依存関係を検出することを示しています。

出典:Reshef、DN、YA Reshef、HK Finucane、SR Grossman、G。McVean、PJ Turnbaugh、ES Lander、M。Mitzenmacher、およびPC Sabeti 「大規模なデータセットでの新しい関連の検出」。

 

この例では、連続変数Aovがあり、他のすべてがブラウザーの種類などの順序付けられていない値で離散しているMIC計算を扱っています。 MICを正しく計算するには、Aov変数を離散化する必要があります。 からの既製のソリューションを使用します 探検データ.net。 このソリューションには100つの問題があります。それは、両方の変数が連続であり、浮動小数点値で表されることを前提としています。 したがって、離散変数の値をFloatにエンコードし、これらの変数の順序をランダムに変更することによって、コードをだます必要があります。 これを行うには、ランダムな順序(XNUMX)で多くの反復を行う必要があり、結果として最大MIC値を取得します。

実験では、一様分布の確率変数とAOV(平均購入額)自体を追加しました。 ご覧のとおり、ほとんどすべてのMICがランダムMICを下回っていました。これは、「条件付き」決定しきい値と見なすことができます。 Aov MICは、それ自体との相関が1に等しいため、ほぼXNUMXであり、これは当然のことです。

興味深い質問が発生します。グラフに相関関係が見られるのに、MICがゼロであるのはなぜですか。 多くの仮説を立てることができますが、OSファミリの場合、それは非常に単純です。Windowsマシンの数は他のマシンの数よりもはるかに多いです。

まとめ

 
Scalaがデータアナリスト(データサイエンティスト)の間で人気を博してくれることを願っています。 標準のIPythonノートブックで作業してSparkのすべての機能を利用できるため、非常に便利です。 このコードはテラバイトのデータを安全に処理できます。クラスターのURIを指定して、ISparkの構成行を変更するだけです。

参考文献

 
【1] Reshef、DN、YA Reshef、HK Finucane、SR Grossman、G。McVean、PJ Turnbaugh、ES Lander、M。Mitzenmacher、およびPC Sabeti 「大規模なデータセットでの新しい関連の検出」。
【2] MINE:MICを使用した最大情報ノンパラメトリック探索ソフトウェア
【3] Minepy –最大の情報ベースのNonparam(Python、C ++、MATLAB、Octave))etric Exploration.
【4] MIC用のデータセットを備えたJavaライブラリ
【5] 「機械学習:確率論的展望」ケビン・パトリック・マーフィー
【6] 上記のコードの要点

 
バイオ: ローマン・ジコフ TopDataLabの創設者兼データサイエンティストであり、データ分析で20年の経験があり、応用数学と物理学の修士号を取得しています。 Romanは、Amazonで入手できる「Roman'sData Science:How to monetizeyourdata」という本も書いています。

元の。 許可を得て転載。

関連する


PlatoAi。 Web3の再考。 増幅されたデータインテリジェンス。
アクセスするには、ここをクリックしてください。

出典:https://www.kdnuggets.com/2021/09/data-analysis-scala.html

スポット画像

最新のインテリジェンス

スポット画像