Bentuk yang bagus untuk menghapus outlier?

12

Saya sedang mengerjakan statistik untuk pembuatan perangkat lunak. Saya punya data untuk setiap build on pass / gagal dan waktu yang berlalu dan kami menghasilkan ~ 200 dari ini / minggu.

Tingkat keberhasilannya mudah untuk dikumpulkan, saya dapat mengatakan bahwa 45% lulus setiap minggu. Tapi saya juga ingin menggabungkan waktu yang telah berlalu, dan saya ingin memastikan saya tidak salah menggambarkan data terlalu buruk. Kupikir sebaiknya aku bertanya pada pro :-)

Katakanlah saya punya 10 durasi. Mereka mewakili kasus lulus dan gagal. Beberapa build gagal dengan segera, yang membuat durasinya singkat. Beberapa menggantung selama pengujian dan akhirnya waktu habis, menyebabkan durasi yang sangat lama. Kami membuat produk yang berbeda, sehingga pembuatan yang sukses pun bervariasi antara 90 detik dan 4 jam.

Saya mungkin mendapatkan satu set seperti ini:

[50, 7812, 3014, 13400, 21011, 155, 60, 8993, 8378, 9100]

Pendekatan pertama saya adalah untuk mendapatkan waktu rata-rata dengan menyortir set dan memilih nilai tengah, dalam kasus ini 7812 (saya tidak repot-repot dengan mean aritmatika untuk set genap.)

Sayangnya, ini sepertinya menghasilkan banyak variasi, karena saya hanya memilih satu nilai yang diberikan. Jadi jika saya tren nilai ini akan memantul antara 5000-10000 detik tergantung pada build yang berada di median.

Jadi untuk memuluskan hal ini, saya mencoba pendekatan lain - menghapus outlier dan kemudian menghitung rata-rata dari nilai yang tersisa. Saya memutuskan untuk membaginya menjadi tertile dan hanya bekerja di tengah:

[50, 60, 155, 3014, 7812, 8378, 8993, 9100, 13400, 21011] ->
[50, 60, 155], [3014, 7812, 8378, 8993], [9100, 13400, 21011] ->
[3014, 7812, 8378, 8993]

Alasan ini tampaknya lebih baik bagi saya adalah dua kali lipat:

  • Kami tidak ingin ada tindakan pada build yang lebih cepat, mereka sudah baik-baik saja
  • Build terpanjang kemungkinan disebabkan oleh timeout, dan akan selalu ada. Kami memiliki mekanisme lain untuk mendeteksi itu

Jadi sepertinya bagi saya bahwa ini adalah data yang saya cari, tetapi saya khawatir bahwa saya telah mencapai kehalusan dengan menghapus, yah, kebenaran.

Apakah ini kontroversial? Apakah metode ini waras?

Terima kasih!

Kim Gräsman
sumber
Anda masih belum mengatakan mengapa Anda ingin mengukur waktu berlalu. Apakah Anda perlu memperkirakan total waktu alat berat yang Anda bayar? Apakah Anda perlu memperkirakan berapa banyak perjalanan ke mesin kopi yang dapat Anda lakukan? Apa tindakan yang akan Anda ambil jika Anda tahu waktu?
StasK
Juga, jika Anda memiliki produk heterogen yang Anda buat, maka memantul adalah hal yang alami, dan Anda tidak harus mencoba untuk menyingkirkannya. Jika Anda memiliki ukuran kompleksitas proyek tertentu (# file, # baris kode, # rutinitas, dll.), Maka Anda mungkin tertarik dengan waktu yang telah berlalu yang dinormalisasi oleh kompleksitas, yang mungkin lebih stabil. Jika Anda ingin membuatnya benar-benar stabil dan datar dari waktu ke waktu, maka Anda tidak akan bisa belajar ketika Anda perlu mengambil tindakan.
Tugas
@StasK: terima kasih atas komentar Anda, ini adalah masukan yang berharga. Aksinya sudah diketahui: banyak bangunan ini membutuhkan waktu terlalu lama, dan kita harus berusaha membuatnya lebih cepat. Saya ingin menggunakan ukuran agregat untuk melihat apakah semuanya menjadi lebih baik atau lebih buruk.
Kim Gräsman
Dan ya, idealnya saya mungkin akan melakukan ini dengan produk, tetapi sumber data tidak mempertahankan informasi itu jadi saya menipu berdasarkan apa yang saya ketahui tentang distribusi. Ini mungkin berubah seiring waktu, tentu saja, dan saya mungkin harus berpikir ulang.
Kim Gräsman
Menurut saya, Anda memiliki tiga grup dalam data Anda: (i) membangun yang membangun; (ii) bangunan yang gagal (dan Anda mengatakan mereka cenderung gagal dengan cepat), dan (iii) bangunan yang ditutup (atau hampir demikian) - dan itu mungkin yang utama jika bukan satu-satunya kelompok yang ingin Anda ambil tindakan. Ukuran agregat waktu mungkin tidak bermanfaat; tetapi sesuatu seperti bangunan terpanjang ke-10, atau persentil tertinggi ke-10 dari distribusi waktu pembuatan, mungkin merupakan ukuran yang lebih baik dari apa yang ada pada ekstrem distribusi yang Anda pedulikan. Itulah kira-kira yang digunakan EPA dalam pemantauan polusi mereka.
Tugas

Jawaban:

8

Pendekatan Anda masuk akal bagi saya, dengan mempertimbangkan tujuan Anda. Ini sederhana, mudah, menyelesaikan pekerjaan, dan Anda mungkin tidak ingin menulis makalah ilmiah tentang itu.

Satu hal yang harus selalu dilakukan seseorang dalam berurusan dengan outlier adalah untuk memahaminya , dan Anda sudah melakukan pekerjaan yang hebat tentang hal ini. Jadi cara yang mungkin untuk meningkatkan pendekatan Anda adalah: dapatkah Anda menggunakan info tentang bangunan mana yang menggantung? Anda menyebutkan bahwa Anda memiliki "mekanisme lain untuk mendeteksi itu" - dapatkah Anda mendeteksi dan kemudian hanya menghapusnya dari sampel?

Kalau tidak, jika Anda memiliki lebih banyak data, Anda bisa berpikir untuk menghapus bukan tertile, tetapi kuintil ... tetapi pada titik tertentu, ini kemungkinan tidak akan membuat banyak perbedaan.

Stephan Kolassa
sumber
Ketika saya mengatakan mekanisme "lain", maksud saya benar - benar berbeda di luar kumpulan data ini, jadi saya tidak dapat membuat keputusan berdasarkan itu di sini. Kami mengumpulkan data setiap hari, dan kami hanya mendapatkan ~ 50 build per hari, jadi saya pikir kuintil mungkin menghasilkan terlalu sedikit data, tetapi terima kasih atas sarannya, saya dapat bereksperimen dengannya!
Kim Gräsman
13

Apa yang Anda lakukan dikenal sebagai pemangkas .

Seperti yang telah Anda lakukan, adalah umum untuk memotong proporsi yang sama dari setiap sisi (proporsi pemangkasan).

Anda dapat memotong apa saja antara 0% (rata-rata biasa) hingga (hampir) 50% (yang memberikan median). Contoh Anda telah dipangkas 30% dari masing-masing ujung.

Lihat jawaban ini dan artikel Wikipedia yang relevan .

[Sunting: Lihat diskusi bagus Nick Cox tentang topik ini.]

Ini adalah penaksir lokasi yang cukup masuk akal dan kuat. Biasanya dianggap lebih cocok untuk distribusi yang hampir simetris daripada yang sangat miring, tetapi jika sesuai dengan tujuan Anda * tidak ada alasan untuk tidak menggunakannya. Berapa yang terbaik untuk dipangkas tergantung pada jenis distribusi yang Anda miliki dan properti yang Anda cari.

* Tidak sepenuhnya jelas apa yang ingin Anda perkirakan di sini.

Ada sejumlah besar pendekatan kuat lainnya untuk merangkum 'pusat' distribusi, yang beberapa di antaranya mungkin berguna bagi Anda. (mis. M-estimator mungkin ada gunanya bagi Anda, mungkin)

[Jika Anda membutuhkan ukuran variabilitas yang sesuai untuk digunakan dengan mean Anda yang dipangkas, deviasi standar Winsorized mungkin berguna bagi Anda (pada dasarnya, saat menghitung sd, ganti nilai yang akan Anda potong ketika memotong dengan nilai paling ekstrim yang Anda miliki). tidak terputus).]

Glen_b -Reinstate Monica
sumber
Saya belum benar-benar memeriksa bentuk khas distribusi saya, saya pikir itu bervariasi dari minggu ke minggu tergantung di mana orang membuat perubahan. Bahkan mungkin sangat miring.
Kim Gräsman
Terima kasih telah menaruh nama di hack-job saya, btw. Ini menginspirasi beberapa kepercayaan :-)
Kim Gräsman
2

Namun metode lain adalah menghitung median dari semua rata-rata berpasangan atau melakukan bootstrap.

Memperbarui:

Median dari semua rata-rata berpasangan disebut penduga Hodges-Lehmann . Pengukur ini biasanya memiliki efisiensi tinggi. Entri ensiklopedia ini oleh Scott L. Hershberger mengatakan:

Sementara estimator median dan Hodges-Lehmann keduanya lebih disukai daripada rata-rata sampel untuk distribusi nonsimetrik, estimator Hodges-Lehmann memiliki efisiensi relatif asimptotik yang lebih besar sehubungan dengan rata-rata daripada median.

Bootstrap mungkin kurang relevan dan lebih intensif komputasi, tetapi Anda bisa mengambil sampel acak kecil data dengan penggantian dan menghitung rata-rata subsampel itu, melakukannya berkali-kali dan menghitung median dari semua cara.

Dalam kedua kasus Anda tidak lagi harus memilih nilai di antara nilai-nilai data Anda (ketika Anda menghitung median biasa), tetapi Anda memilih di antara banyak rata-rata dari himpunan bagian dari data.

Finn Årup Nielsen
sumber
2
Bisakah Anda menggambarkan kelebihan dan kekurangan metode ini? Jawaban satu baris tidak mencukupi.
StasK
1
Saya telah mencoba membuat pembaruan dengan lebih banyak penjelasan
Finn Årup Nielsen
Rata-rata berpasangan dan bootstrap tampaknya melibatkan sejumlah perhitungan ulang atas seluruh dataset. Sampel umumnya cukup kecil (<500 nilai), jadi mungkin itu bukan masalah, tetapi tampaknya lebih rumit. Baik untuk mengetahui ada lebih banyak pendekatan untuk bereksperimen dengan jika rata-rata yang dipangkas ternyata terlalu tumpul. Terima kasih!
Kim Gräsman
1

Tampaknya masuk akal apa yang Anda lakukan: hanya untuk informasi saya cukup sering menggunakan proses berikut untuk tujuan yang sama: tapi saya hanya benar-benar tertarik pada Outliers Atas.

Hitung lima ringkasan angka: Min, Q1, Median, Q3, Max. Hitung Kisaran Interkuartil: Q3-Q1. Tetapkan 'pagar' outlier Anda di Q1-IQR * X, dan Q3 + IQR * X: di mana nilai wajar 'X' adalah 1,5.

Menggunakan Excel dan angka-angka Anda di atas (menggunakan 1,5 untuk 'X' **) menghasilkan satu outlier atas: 21011

MIN 50
Q1  3014
MEDIAN  8095
Q3  9073.25
MAX 21011
IQR 6059.25
UPPER FENCE 18162.125
LOWER FENCE -6074.875

Jadi pagar yang lebih rendah di sini tidak berguna atau realistis untuk contoh Anda sebenarnya: yang mendukung poin yang dibuat oleh pos lain mengenai pentingnya memahami makna data spesifik Anda.

(** Ditemukan satu kutipan untuk aturan '1.5': Saya tidak mengatakan itu otoritatif, tetapi tampaknya merupakan titik awal yang masuk akal bagi saya: http://statistics.about.com/od/Description-Statistics/a/ What-Is-The-Interquartile-Range-Rule.htm )

Anda juga dapat memutuskan (mungkin) hanya menggunakan poin data yang termasuk dalam IQR itu sendiri: ini tampaknya menghasilkan hasil yang masuk akal (dalam hal keanggotaan untuk metode Anda sangat mirip).

menggunakan data yang sama, ini akan menempatkan titik data berikut di 'area yang diminati':

7812
3014
13400
21011
8993
8378
9100

Pada Boxplot: semua titik ini akan berada di dalam bagian kotak (bukan bagian kumis) dari diagram.

Di dapat dilihat bahwa daftar ini mencakup beberapa item yang tidak ada dalam daftar asli Anda (versi build yang lebih lama); Saya tidak dapat mengatakan apakah satu daftar lebih akurat dengan cara apa pun. (lagi, turun untuk memahami dataset Anda).

monojohnny
sumber
Terima kasih, ini pada prinsipnya sangat dekat dengan apa yang sudah saya lakukan. Dengan cara apa metode ini lebih baik dari sekadar mempartisi set data?
Kim Gräsman
1
Saya tidak dapat mengatakan apakah salah satu metode lebih baik atau tidak: Saya menyarankan ini berdasarkan apa yang saya baca di buku statistik / situs. Satu hal (saya pikir) metode menambahkan adalah yang memungkinkan Anda untuk menyesuaikan 'pagar' untuk apa pun yang Anda rasa cocok (menyesuaikan faktor 1,5); di mana hanya mengambil sepertiga tengah mungkin lebih rentan untuk memasukkan pencilan yang berpotensi tinggi (yang bisa dibilang lebih baik diklasifikasikan di luar pagar) ..... tapi aku tidak bisa mengatakan itu dengan pasti. Satu hal lain tentang penggunaan Kuartil, adalah bahwa ringkasan 5-nomor dipahami dengan baik dan umum digunakan.
monojohnny
Terima kasih atas detail yang ditambahkan! Saya melakukan ini dengan Python, jadi saya sudah memiliki fungsi di mana saya mempartisi dataset menjadi bagian N dan kemudian mengeluarkan bagian tengah. Ini adalah perubahan satu karakter untuk menjadikannya 5 atau 7 partisi sebagai gantinya. Tetapi poin Anda diambil dengan baik, dan ada baiknya untuk melihat cara lain yang umum untuk mendekati masalah ini. Terima kasih lagi.
Kim Gräsman
kedengarannya bagus untuk saya: Saya akan menambahkan satu hal lagi untuk menekankan tentang menggunakan kuartil dan pagar (daripada memiliki partisi variabel) - adalah bahwa mereka memetakan langsung ke boxplots: en.wikipedia.org/wiki/Box_plot yang memungkinkan (di antara hal-hal lain) cara standar untuk membandingkan distribusi yang berbeda secara grafis.
monojohnny