このページでは

For AI agents: a documentation index is available at /docs/llms.txt. Append .md to any page URL for markdown, or send Accept: text/markdown.

実験におけるウィンソリゼーション

外れ値とは、データセットの遠端に発生するデータポイントのことです。 これらのデータポイントは通常、平均値などの中心傾向の測定値とはかけ離れているため、分析結果を歪める可能性があります。

データセット内の外れ値は、計装の問題が原因である場合があります。たとえば、ユーザーが主にモバイルデバイスを通じてアプリとやり取りしている場合、WebインストルメンテーションがiOSやAndroidインストルメンテーション(秒)とは異なるレート(ミリ秒)でイベントプロパティを送信すると、Webベースのユーザーからのデータは外れ値のように見える可能性があります。

異常値は他にもさまざまな理由で発生する可能性がありますが、その中には管理できないものもあります。

データ内の外れ値の検出

ヒストグラムの末尾を調べることで異常値を特定できることがよくありますが、異常値とみなされるものを定義する正しい方法は1つありません。

一般的な方法の1つは、平均からの標準偏差を使用することです。これは、データが正規分布と一致している場合にうまく機能します。 もしそうであれば、データポイントの68%が1標準偏差以内、95%が2標準偏差以内、99.7%が3標準偏差以内になることが予想できます。状況によっては、標準偏差が3つを超えるものは外れ値であると判断する場合があります。

標準偏差は外れ値に敏感である可能性があります。 分布の歪みが大きくなれば、サンプル平均が正規分布に近づくことを確認するために必要なサンプルサイズも大きくなります。 ユーザー数が数百万人未満のデータセットでは、標本平均値が常に正規分布であると仮定することはできません。

ボックスプロットは外れ値を特定するためのもう一つの方法です。 ボックスプロットは、25番目のパーセンタイル数(Q1)と75番目のパーセンタイル数(Q3)を使用して外れ値の「内部フェンス」を計算します。

  • 上限値: 75th percentile + 1.5 * (75th percentile - 25th percentile).
  • 下限値:25th percentile - 1.5 * (75th percentile - 25th percentile)。

歪んだ分布を考慮したより高度なバージョンについては、この記事を参照してください。

特定のパーセンタイルを選択し、そのパーセンタイルを超えるすべての値を外れ値として指定することもできます。 これを適当に行わないでください。まずデータセットのプロットを調べ、そこから作業を進めます。

外れ値の正しい定義はケースによって異なり、多くの場合、ビジネスユースケースによって異なります。ドメインに関する知識を活用して、何が外れ値とみなされるかを判断してください。

Amplitudeの外れ値分析は、使用しているメトリックの種類によって異なります。 たとえば、ユニークやリテンションなどのバイナリ指標には外れ値がないため、以下のメソッドはそれらには適用できません。

外れ値の例

次の例は、外れ値がどのように分析を歪めるかを示しています。{1, 2, 5, 1000} のデータセットでは、1000 が明らかな外れ値です。このデータポイントがない場合、平均は 2.67 になります。 これを使用すると、平均値は 252 になります。これは技術的には正しいことですが、データセットの実際の性質を誤って表しています。

この例では、データセットに外れ値を含めると、外れ値なしで得られる統計的有意性が失われます。

r
set.seed(29)
control = rnorm(100)
treatment = rnorm(100, 3)
t.test(control, treatment)
treatment_with_outlier = c(rnorm(100, 3), -1000)
t.test(control, treatment_with_outlier)

外れ値がない場合、p値は基本的に0です。外れ値がある場合、p値は0.495です。

outliers1.png

これは母集団の分布であり、標本平均の分布ではありません。

平均値の代わりに、外れ値に対してより耐性のある中央値などのパーセンタイルを使用することもできます。

データ内の外れ値を解決する

ロングテール分布に対処するためのオプションには、ウィンソライゼーション、外れ値の除去、ブートストラップ、ノンパラメトリックテストなどがあります。 ウィンソライゼーションと外れ値の除去は歪度を減らすため、サンプル平均が正規分布に近似する場合にサンプルサイズを小さくすることができます(中心極限定理)。

外れ値を処理するための最良の方法は、使用しているメトリックの種類によって異なります。 このセクションでは、いくつかの一般的なメトリックタイプのオプションについて説明します。

合計

合計メトリックを使用する場合、外れ値を解決するためのいくつかのオプションがあります。

視覚化とより深い分析

データの可視化は多くの場合、優れた出発点です。 たとえば、データセットのセグメンテーションチャートを作成し、頻度を選択すると、特定のユーザーが特定のイベントを他のほとんどのユーザーよりも頻繁にトリガーするかどうかを確認できます。次に、頻度チャートを棒チャートに変更して、ヒストグラムとして表示します。必要に応じてビンのサイズを調整します。

セッションの再生は、特定のユーザーが外れ値として動作する理由を理解するのに役立ちます。まず、ユーザーが外れ値として分類されるためにイベントをトリガーする必要がある回数を定義します。次に、ユーザーがそのしきい値を満たすのに十分なイベントをトリガーしたセッションを探します。 彼らの行動が他のユーザーとどのように異なるかに注意を払い、彼らがなぜ外れ値であるかを理解してください。

このアプローチは、特定のイベントのイベントボリュームの急増をデバッグする場合に役立ちます。 この急増の原因は少数のユーザーにある可能性があります。これは、アクティビティがユーザーベース全体に均等に分布している場合とは異なる解釈を示唆しています。

FREQPERCENTILE

セグメンテーションチャートでこの数式を使用して頻度チャートの分析を継続し、パーセンタイルを取得してください。

計算

コンピューテーションを使用してイベント数を集計します。グラフ内の分布と個々のユーザー値を調べ、検索して特定の値を見つけ、サンプルをソートして有効な値の範囲を決定します。

ウィンソーライジング

ウィンソーライズは、異常値の影響を軽減するために極端な値を制限することによってデータを変換します。 このプロセスの完全な説明は、この記事の範囲外です。 このセクションでは、Amplitudeの外れ値にウィンソライズを適用する方法について説明します。

たとえば、一部のパワーユーザーがほとんどのユーザーよりも多く作成している場合に、平均的なユーザーが作成するグラフの数を調べるには、適切な値でウィンソライゼーションします(ウィンソライゼーション値の選択方法の詳細については、こちらをご覧ください)。 この例では、値は 100 です。セグメント化チャートを開き、測定基準 ブロックから 数式 を選択し、次の数式を入力します。

(TOTALS(A1) + 100*UNIQUES(A2)) / (UNIQUES(A1) + UNIQUES(A2))

この数式では、セグメント 2 のイベント A のみがウィンソーライズされます(100 * UNIQUES(A2))。Amplitude は、ウィンソライゼーションの対象となるユーザーの数をカウントし、最初のステップで選択したウィンソライゼーション値(この場合は 100)を乗算します。

ウィンソライゼーションの値を選択するには、いくつかのオプションがあります。 まずは、ビジュアライゼーションを参照して、データを2つの異なるモードに分離するカットオフポイントを探すことが良いでしょう。

outliers2.png

ユーザーを除外する

「実験結果」チャートを使用して、イベントを指定した回数以上トリガーしたユーザーを除外できます。 誰が実行したかというフィルターを各チャートセグメントに追加します。 事前に入力された実験結果チャートを取得するには、Amplitude 実験の分析カード上の「チャートで開く」を選択します。

プロパティの合計

ウィンソリゼーション

ウィンソライゼーションに最適な値を判断することが難しい場合、派生プロパティを使用して次のことを支援します。

  • 最小値と最大値の両方のウィンザライゼーションを同時に、または別々に実行するには、min(max(1, X), 100) の派生プロパティを作成します。ここで、X は対象のプロパティであり、1 と 100 は X の下限値と上限値です。
  • 変換には派生プロパティを使用します。 たとえば、POWER(x, .5) は平方根を返します。スキューを減らす他のトランスフォーメーションとして、log、sqrt、またはBox-Coxトランスフォーメーションがあります。

これらのトランスフォーメーションの一部では、正のデータのみが必要となります。この問題を回避するには、各データポイントに最小値と小さな数値を追加します。 また、Yeo-Johnson トランスフォーメーションを使用することもできます。

ヒストグラムで視覚化する

頻度チャートと同様に、ビンのサイズを調整してイベントレベルで外れ値を視覚化します。 値範囲のサイズに応じて、検査対象データの範囲を変更して、ヒストグラムの異なる部分にズームアップできます。 ヒストグラムの最後のビンは異常値を考慮するために他のビンよりも大きいため、右端のバーは他のバーよりも高いことがよくあります。

次に、Microscopeを使用してこれらのユーザーのセッション再生を表示します。また、セッションリプレイページのフィルタを使用して、たとえば、ほとんどの人が50ドルを費やしているのに1000ドルを費やしているユーザーについてより多くのインサイトを得ることもできます。

PERCENTILE

パーセンタイル数式を使用して、イベント プロパティのパーセンタイルをイベント単位で表示できます。

計算

プロパティの合計であるコンピューテーションを作成し、ページ下部のグラフを調べます。

ユーザーを除外する

このコンピューテーションをコホートで使用し、外れ値を生成したユーザーを除外します。また、プロパティの合計フィルタを使用してコホートを作成し、そのコホート内のユーザーをフィルタリングすることもできます。 これは、Amplitude実験とAmplitude アナリティクスの両方で実行できます。

Amplitude アナリティクスにおけるWinsorization

セグメント化チャートを開き、[測定基準] ブロックから [数式] を選択し、次の数式を入力します。

(PROPSUM(A1) + W*UNIQUES(A2)) / (UNIQUES(A1) + UNIQUES(A2))

Wはウィンソライゼーション値です。

*「Who performed」*は propsum をサポートしていませんが、プロパティの合計に基づくコホートを作成し、そのコホートをセグメントフィルターとして追加できます。

プロパティの平均

sum of propertyイベント用にリストされているすべてのメソッドは、average of propertyイベントでも機能します。sumをaverageに置き換えます。

ファネルの合計

この値をファネルの最後のステップの合計と概算してください。

ファネルの最後のステップの合計

これをファネルの最後のステップの割合の合計として概算してください。

プロパティの最小値 / プロパティの最大値

コホートは prop min や prop max をサポートしませんが、計算はサポートします。 セグメントコントロールに計算に関するフィルタを追加して、それらにアクセスできます。

実験におけるウィンソリゼーション

Amplitude 実験は、ユニーク、ファネルユニーク、およびリテンションを除くすべてのメトリクスタイプの最大ウィンソーライゼーションをサポートしています。ウィンソーライゼーションは、エンタープライズプランのユーザーのみが利用できます。

ウィンソライゼーションを有効にすると、Amplitude実験はウィンソライゼーションをメトリックごとに適用します。デフォルト値を、ウィンソリゼーションに使用する値に変更します。

メトリクス表で、セルにカーソルを合わせると、ウィンザー化されたユーザーの数が表示されます。

ベストプラクティスとして、データの5%以上をウィンソーシングしないようにしてください。 たとえば、データの10%が異常値である場合、そのグループを別々に調査し、2つの異なる分析を実行します。 また、あるバリアントに別のバリアントよりも外れ値が多いかどうかを調べることもできます。数式メトリックの場合、Amplitudeは各項に同じウィンソライゼーション値を適用します。

実験における対数変換

ウィンソリゼーションと同様に、Amplitude実験は外れ値を処理するための代替手段として対数変換もサポートしています。対数変換は、エンタープライズプランのユーザーのみが利用できます。

ログ変換を有効にすると、Amplitude実験はログ変換をメトリックごとに適用します。 底に e を持つ対数を使用します。実験では ln(1+x) を使用して、x = 0 のケースを処理します。x は、特定のユーザーのメトリクス値です。1+x <= 0の場合、実験はその個々のユーザーのメトリクス値として0を返します。

ウィンソーライゼーションとログ変換の両方を有効にすると、Amplitudeは最初にウィンソーライゼーションを適用し、次にログ変換を適用します。

関連リソース

これは役に立ちましたか?