分類子サむト蚪問者のアクティビティの分析

1.はじめに



このノヌトでは、サむト蚪問者のアクティビティを分析するためのシステムでの分類子の実甚的なアプリケヌションのいく぀かの偎面に぀いお説明したす。 機械孊習タスクのコヌド䟋を瀺したす。これは、むンタヌネット䞊の統蚈のグロヌバルな分析ず、倧芏暡なポヌタルでの行動芁因の分類に関するロヌカルな問題の䞡方に積極的に䜿甚されおいたす。









2.確率論のいく぀かの方法



䞻な問題は、確率的プロセスサむト蚪問者のアクティビティでは、事前にランダム倉数の倀を決定するこずができないずいう事実です。 ただし、各倀の確率を掚定できたす。 さらに、機械孊習の方法を䜿甚するず、この倉数たたはそのランダム倉数が意味を持぀理由を理解するこずができたす。







非垞に鋭く衚珟された芏則性を持぀確率的プロセスがありたす。たずえば、オブザヌバヌは数千の詊行を蚘録したした。 芳枬の長い期間党䜓にわたっお、ランダム倉数が等しい分垃を持぀4぀の可胜な倀しか取らないこずが明らかになったずしたす。 これらの倀の1぀の量がすべおの数の玄4倍になるず仮定するこずは論理的です。 逆もたた同様です。1぀のグルヌプの倀の数に4を掛けるず、すべおのオブゞェクトのおおよその数が埗られたす。







同様に、モンテカルロ法に埓っお耇雑な図圢の近䌌領域を特定できたす。その点のヒット数、ランダムな点の総数、および耇雑な図圢が内接する空間の領域がわかっおいる堎合。 耇雑な図のヒット数をポむントの総数で陀算するず、これは空間内の図が占めるおおよその郚分になるず盎感的に感じられたす。 さらに、ポむントがこの耇雑な数字に陥る可胜性もありたす。







簡単な䟋を考えおみたしょう。 巚倧なニュヌスポヌタルに4぀の䞻芁なトピックがありたす。 䞀郚のナヌザヌは、サむトにアクセスしお、トピックのうちの1぀だけを厳密に芋おいたす。 それらの間の分垃は等しい、぀たり クラスタヌの1぀のトピックが衚瀺される確率。 しかし、新しいポむントの正確な䜍眮は事前にわかっおおらず、これらのクラスタヌの1぀に衚瀺されるこずがわかっおいるだけです重心は倧きな緑色の点ずしお衚瀺されたす。













存圚しないトピックを衚瀺するこずは䞍可胜です存圚しないトピックを衚瀺するにはどうすればよいですか。 その確率はれロです。 どのポむントもこのスペヌスにのみ属したす。 特定のクラスタヌに入る確率は1/4です。 少なくずも1぀のクラスタヌに該圓する確率は1すべおのむベントの確率の合蚈に等しくなりたす。これは、ポむントが必然的にそれらのいずれかに該圓するためです。 ポむントが連続しお1぀のクラスタヌに数回入る確率は、これらのむベントの確率の積に等しくなりたす。 これは、実隓的および正匏に次のように蚘述されおいたす。











しかし、正芏分垃の堎合、わずかに異なる予枬戊術が䜿甚されたす。 平均倀を特定する必芁がありたす。 それが最も可胜性が高いこず。 以䞋は、等確率分垃ず正芏分垃の2぀の芖芚衚瀺です。











広がりの匷さを理解するには、分散たたは暙準偏差ず呌ばれ、ギリシャ文字シグマで瀺される平方根を識別する必芁がありたす。 離散確率倉数の倀を予枬するには、これは非垞に重芁な指暙です。これは、ほずんどの倀正芏分垃の堎合がシグマ内にあるためです。







蚀い換えるず、正芏分垃の䞋で算術平均が期埅される堎合数孊的な期埅に等しい、蚱容誀差䞍正確たたは誀差が少なくずも玄1シグマになる堎合、ほずんどの堎合玄68に正垞に掚枬されたす。 分散のレベルが異なるランダム倉数を芖芚的に衚瀺したす。最初は分散が小さく、その埌明らかに増加したす。 芖芚の利䟿性のために、数孊的期埅も増加したす。











離散確率倉数に぀いお話しおいるので、数孊的期埅倀匏の代わりに算術平均倀の匏を䜿甚するこずは蚱容されたす。 䞊蚘の理由により、以䞋に瀺す匏を䜿甚しお、2乗倀ずその確率の積を蚈算しないようにしおから、これらの積の合蚈から2乗数孊的期埅倀を枛算できたす。 正芏分垃関数ずそれに必芁な倉数それらの蚈算匏を瀺したす。













しかし、すべおが垞に予枬できるずは限りたせん。 圓然、ランダム倉数の確率はさたざたです。 すべおのプロセスがガりス分垃たたは等確率分垃になるわけではありたせん。 倚くの堎合、時間の経過に䌎う確率の倉化を蚘録するこずが可胜です。 䞀郚のメトリクスは予枬䞍可胜な方法で倀を倉曎できたすが、これは明らかに確率に圱響したす。 2぀のメトリックが䞍均等に成長し、成長埌に元の倀に戻った堎合の倀の倉化の䟋











その結果、倚くのプロセスで、結果ポむントの倖芳が均等に分散されない堎合がありたす。 明らかに、次の䟋では、クラりドを空間に均䞀に分散しお呌び出すこずはできたせん。 明確にするために、その茪郭も匕甚したす。











分垃が異なる倧量のデヌタの分析では、機械孊習が圹立ちたす。 各芳枬には倧きな特城ベクトルがありたす。 たずえば、急性呌吞噚りむルス感染症の蚺断では、䜓枩などの指暙がよく䜿甚されたす。 適切な機噚で客芳的に枬定するこずは非垞に簡単です。 明らかに、2぀のグルヌプの人々健康および急性呌吞噚りむルス感染症の䜓枩の蚘述統蚈を芋れば、この指暙の違いを理解するのは非垞に簡単です。 もちろん、他の倚くの疟患では発熱の症状が発生するたたは存圚しない可胜性があるため、枬定基準だけでは十分ではありたせん。 したがっお、指暙の膚倧なリスト予枬子のベクトルを客芳的に枬定する必芁がありたす。 各ベクタヌには、健康たたは病気のラベルが必芁です。 これは、これから説明する機械孊習方法のデヌタ準備の䞀般的な原則です。







3.予備調査



分析の準備段階では、デヌタセンタヌ内のサヌバヌの関䞎が必ずしも必芁ではないため、ロヌカルコンピュヌタヌで実行されたす。 最も䞀般的なデヌタ分析ツヌルの1぀は、RおよびPythonプログラミング蚀語Jupyter、Pandas、NumPy、およびSciPyず組み合わせたものです。 すでに実装されおいる豊富な数孊関数のセットず、情報を芖芚化するツヌルがありたす。







予備調査の段階で、分類に必芁な情報を収集する必芁がありたす。 これは垞に特城ベクトルです。 数倀通垞はDoubleデヌタ型。 この段階では、倀を取埗するこずが䞍可胜な堎合に収集およびアクションの方法が遞択されたす欠損倀を算術平均たたは䞭倮倀に眮き換えるこずが蚱容される堎合がありたす。







メトリック予枬子は、珟象のこの郚分の本質を客芳的に反映する数倀でなければなりたせん。 このような枬定基準は枬定可胜であり、枬定倀自䜓は再珟可胜です動䜜䞭の枬定デバむスを䜿甚すれば誰でも実隓を繰り返し、同じ指暙を取埗できたす。 盎感的には、異なるグルヌプのメトリックの倀の差が倧きいほど、分類が容易になるず予想されたす。 最も理想的なケヌスでは、それらは亀差したせん䞀方の最倧倀が他方の最小倀より明らかに小さい。







この時点で远加のチェックも必芁になる堎合がありたす。 非垞に倚くのサヌドパヌティのラむブラリず゜フトりェア補品を䜿甚しお実装されおいたす。 むンポヌトされたモゞュヌルの数、特に䞀目で異なる宛先MystemやSeleniumなどを芋るのが楜しい堎合がありたす。 仮説を確認たたは反論するさたざたな実隓を実行できるこずは論理的です。 グルヌプに分けお条件を泚意深く監芖し、それに応じおメトリックが倉化するこずを期埅したす。







行動芁因を分析するためのシステムの詳现に぀いお話す堎合、それらの䜜業のロゞックは、収集されたデヌタがすでにクリヌン化および怜蚌されおいるこずを意味したす。 理想的には、アプリケヌション自䜓がデヌタ収集の品質を担圓する必芁がありたす。 マヌクするためだけに残りたす各ベクトルは、それが属するクラスをマヌクしたす。 アプリケヌションがすでにデヌタをマヌクアップしおいる可胜性がありたすたずえば、デヌタベヌスにレコヌドになるレコヌドが既にありたす補品を賌入したかどうか。 もちろん、これは、このむベントの可胜性をさらに予枬したり、最も重芁な予枬因子を特定したりするために必芁です。







倚くの堎合、デヌタはCSVたたはlibsvm圢匏の通垞のテキストファむルに保存されたす。 これにより、RずPythonPandas、NumPyを䜿甚しおそれらを簡単に凊理できたす。 堎合によっおは、デヌタベヌスに配眮する必芁がありたす。 たた、堎合によっおは、分散コンピュヌティングが必芁になるこずがありたす。 巚倧なポヌタルやグロヌバルな統蚈システムでは、非垞に倧きなマトリックスが取埗されたす。 これにより、非垞に広いテヌブル倚数の属性を持぀倚数のタプルに膚倧な数のオブザベヌションを保存するシステムを遞択する問題が生じたす。







恐らく、凊理速床が非垞に速い特殊な分析゜リュヌションに泚意を払うこずは理にかなっおいたす。 ClickHouse分析デヌタベヌス管理システムなどのテクノロゞヌを䜿甚するず、いく぀かの重芁な指暙を事前に分析し、デヌタ自䜓を準備できたす。 そしお今、私たちは高いパフォヌマンスだけでなく、統蚈を操䜜するための倚くの䟿利な機胜だけでなく、远加機胜、たずえばデヌタ゚クスポヌト圢匏JSONずXMLを含むたたはget-request http // localhost8123 /query = Q 、Qの代わりに次のSQLステヌトメントがありたす。







SELECT page, COUNT() AS views, uniqCombined(uuid) AS users FROM example.page_views GROUP BY page FORMAT CSVWithNames;
      
      





デヌタの準備ず怜蚌は非垞に深刻なプロセスであり、圌らはそれに非垞に泚意を払っおいたす。 いく぀かの調査を行った埌、機械孊習アルゎリズムの遞択ず、䞊蚘のツヌルの遞択に関するより詳现な分析が始たりたす。 最適な分類アルゎリズムを遞択する段階でも、初期デヌタの怜蚌ず新しい予枬倉数を芋぀ける詊みは継続されたす。 いずれにせよ、倚くの「分類の驚異」は、いく぀かの芋逃したたたはノむズの倚い予枬子によっお簡単に説明されたす。 堎合によっおは、分類子の配列を䜜成し、察応するパラメヌタヌを䜿甚しお各分類子の正しい操䜜を分析するこずもできたす。







 import pylab import pandas as pd import numpy as np import xgboost as xgb import matplotlib.pyplot as plt from sklearn.cluster import KMeans from mpl_toolkits.mplot3d import Axes3D from sklearn.linear_model import SGDClassifier from sklearn.neural_network import MLPClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.ensemble import GradientBoostingClassifier from sklearn.linear_model import LogisticRegression from sklearn.tree import DecisionTreeClassifier from sklearn.svm import SVC from sklearn.metrics import accuracy_score from IPython.core.display import display, HTML # #   # classifiers = [ LogisticRegression(max_iter=200, penalty="l2"), SGDClassifier(loss="hinge", penalty="l2"), MLPClassifier(solver='lbfgs', alpha=1e-5, hidden_layer_sizes=(3, 4)), RandomForestClassifier(n_estimators=60, max_depth=5), GradientBoostingClassifier(n_estimators=180, learning_rate=1.0, max_depth=4), DecisionTreeClassifier(), SVC(), ] # #     # result = [] for classifier in classifiers: classifier.fit(features, classes) report = accuracy_score(testClasses, classifier.predict(testFeatures)) result.append({'class' : classifier.__class__.__name__, 'accuracy' : report}) display(HTML('<h2>Result</h2>')) display(pd.DataFrame(result)) # #     # model = xgb.XGBClassifier() model.fit(features, classes) pylab.rcParams['figure.figsize'] = 3, 3 plt.style.use('ggplot') pd.Series(model.feature_importances_).plot(kind='bar') plt.title('Feature Importances') plt.show()
      
      











ご芧のずおり、基本的な分類アルゎリズムは人気のあるラむブラリに既に実装されおいるため、ほんの数行のコヌドで非垞に簡単か぀迅速に䜿甚できたす。 さらに、䞀郚のモデルでは、適切な分類子RandomForestClassifier、GradientBoostingClassifier、XGBClassifierなどを䜿甚しお予枬子の有意氎準のチャヌトを芋るず非垞に䟿利です。 クラスタヌ分析など、他のタむプのデヌタ分析ず芖芚化を実行するず非垞に䟿利です。







 import pylab import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans from mpl_toolkits.mplot3d import Axes3D centroids = KMeans(n_clusters=4, random_state=0).fit(features).cluster_centers_ ax = Axes3D(pylab.figure()) ax.scatter(features[:, 0], features[:, 1], features[:, 2], c='blue', marker='p', s=8) ax.scatter(centroids[:, 0], centroids[:, 1], centroids[:, 2], c='g', marker='o', s=80) plt.show()
      
      





4.完成したモデルの䜜成



必芁なパラメヌタヌを備えた適切なアルゎリズムがロヌカルシステムで遞択された埌、分散コンピュヌティングの準備が開始されたす。そのタスクは、むベントのクラスを事前に予枬するこずです。 これは、バむナリ分類むベントが発生するかどうかだけでなく、マルチクラス分類にもなりたす。 Apache Sparkは、そのような分散コンピュヌティングタスクによく䜿甚されたすバヌゞョン2.0.2のScalaに䟋を瀺したす。 もちろん、最初のテスト実行では、新しいデヌタで遞択した゜リュヌションの非垞に培底的なチェックも必芁です。







 import org.apache.spark.ml.classification.MultilayerPerceptronClassifier import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator val train = spark.read.format("libsvm").load(file) val test = spark.read.format("libsvm").load(fileTest) val trainer = new MultilayerPerceptronClassifier().setLayers(Array[Int](3, 5, 4, 4)).setBlockSize(128).setSeed(1234L).setMaxIter(100) val result = trainer.fit(train).transform(test) val predictionAndLabels = result.select("prediction", "label") val evaluator = new MulticlassClassificationEvaluator() evaluator.setMetricName("accuracy").evaluate(predictionAndLabels)
      
      





怜蚌および調敎プロセスの最埌に、機械孊習アルゎリズムの最終バヌゞョンが䜜業を開始したす。 膚倧な量のデヌタをマヌクし、ナヌザヌフレンドリヌなむンタヌフェヌスで結果を衚瀺したす。 芖芚化は別のアプリケヌションが担圓したす倚くの堎合、これはWebアプリケヌションたたはポヌタルの䞀郚です。 原則ずしお、アプリケヌションは分析システムに぀いお䜕も知らず、デヌタベヌスぞのむンポヌトたたはAPIを介しおのみ接続されたす。 私の個人的な経隓では、バック゚ンド甚の有名なテクノロゞヌスタックPHP7、Yii 2、Laravel、MySQL、Redis、Memcached、RabbitMQず、芖芚的なプレれンテヌション甚のラむブラリセットたずえば、Chart.jsなどは通垞、別の衚瀺アプリケヌションに䜿甚されたす。







このように、行動因子の分析システムを䜜成する基本的なステップを芋たした。 他のデヌタセットを分類するシステムは、同様の原理で機胜したす。 最も基本的な手順は、適切なメトリクスを適切な圢匏で収集し「ベクタヌにデプロむする」ず呌ばれる、適切なパラメヌタヌを䜿甚しお適切なアルゎリズムを遞択するこずです。 もちろん、分類噚の正しい動䜜を怜蚌するこずは重芁です。







私はこの機䌚に今日の日付で、来幎の新幎を前もっお芪愛なる読者に祝犏し、人生のあらゆる分野で幞せず成功をお祈りしたす。








All Articles