重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

外れ値を求めたいのですが、自分で計算式をくんでやってみると、外れ値だと思える値が正常値と判断されてしまい、質問させていただきました。

現在とあるサイトを運営していて、このサイトのコンテンツに対して、アクセス数を元にしたランキング機能を実装しようと考えました。
アクセス数は日毎に記録しています。

しかしながら、アクセス数を見てみると、BOTかなにかの影響である日のアクセス数だけ、異常に高いのが複数のコンテンツにあり、ランキングがめちゃくちゃになってしまいました。

そこで、このような外れ値を除外するプログラムを書こうと考えました。
このプログラムは、
平均値±(3×標準偏差)
の範囲外(以上ではない)だと、外れ値だと検出します。

このプログラムをテストするために、
[29,6,1,5,4,10,1,10,10000]
という9つの値を渡しました。
私は10000がプログラムによって検出される事を期待しました。

しかしながらこのプログラムは、外れ値を検出しませんでした。
そこで計算をみてみると、

平均値=1118
標準偏差=3330
外れ値= 1118 + 3*3330 = 11110

よって10000は外れ値ではないと、検出されていました。

私はどこを間違っていますか?
またどうすれば外れ値を検出することができますか?

A 回答 (5件)

そのやり方は検出力が弱いので推奨されない。



もっと良いやり方はいくつかあるが,簡単なのは箱ひげ図を使うやり方です。

まず,データの第1四分位点Q1,第3四分位点Q3を求めてIQR=Q3-Q1を求める。
次にQ1-3*IQRからQ1+3*IQRの範囲から外れているものを極端な外れ値とする。
また,極端な外れ値ではなくてもQ1-1.5*IQRからQ1+1.5*IQRの範囲から外れているものを軽度な外れ値とする。

http://ja.wikipedia.org/wiki/%E7%AE%B1%E3%81%B2% …

この回答への補足

お返事ありがとうございます。

今回のデータである
[29, 6, 1, 5, 4, 10, 1, 10, 10000]
の場合ですと、

Q1 = 1
Q3 = 1
IQR = 0

よって範囲は
1 <= x <= 1
となり、1以外全て外れ値になってしまったのですが、
私はどこの計算式を間違えていますか?

補足日時:2013/12/13 11:12
    • good
    • 0
この回答へのお礼

補足の補足です。
先ほどは失礼しました。
ソートしないと駄目なんですね。

Q1 = 4
Q3 = 10
IRQ = 6

よって範囲は、Q3+3*IQRを使うと、
-14 <= x <= 28
となりました。

が、これでは正常なデータである29がはじかれてしまっています。

これはデータ数が足りないのでしょうか?

お礼日時:2013/12/13 11:38

#2です。


[29, 6, 1, 5, 4, 10, 1, 10, 10000]
をみて10000は明らかに外れ値だと判断するだろうが,29も外れ値だと判断する人がほとんどだと思う。
どうして正常なデータであると判断できたのでしょう?

> これはデータ数が足りないのでしょうか?

確かに,もっとデータが多ければ29も正常と判断される可能性はあるでしょう。

この回答への補足

これはサンプルデータではありますが、アクセス数のランキングなので普段は1とか5等でも、ある日ブログ等に取り上げられて100ぐらいならありえるという判断です。

ただBOTはそれを超えて1000,10000等、あり得ないほどアクセスするので、なんとかそれを数学で弾けないかと考えた次第でした。

しかし根本的な解決にはなりませんし、数学で弾くのは難しそうですよね…。

システム側で色々考えてみようと思いました。

ご回答ありがとうございました。

補足日時:2013/12/14 16:22
    • good
    • 1

> このプログラムは、


> 平均値±(3×標準偏差)
> の範囲外(以上ではない)だと、外れ値だと検出します。

標準偏差が不偏分散の平方根でデータの数がn個では(n-1)/√nより大きな値は絶対に出ませんので

> このプログラムをテストするために、
> [29,6,1,5,4,10,1,10,10000]
> という9つの値を渡しました

ときに、10000を外れ値として検出することは不可能です。
(n=11以上でないと3以上にならない)
なので、適当な母集団の分布を仮定してシミュレーションにより棄却域を調べてください。

もっともこちらの方法よりも、外れ値の影響を受けにくい#2さんの方法をお奨めします。
    • good
    • 0

#2です。


わかると思うけど,当然Q1-3*IQRからQ1+3*IQRはQ1-3*IQRからQ3+3*IQRの間違いです。1.5の方も同様。
    • good
    • 0

>平均値±(3×標準偏差)



3
を、はずれ値を検出するように変更すればいいのではないでしょうか。
ものすごく恣意的だと思いますが…。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!