แบบฟอร์มที่ดีสำหรับการลบค่าผิดปกติ?


12

ฉันกำลังทำงานเกี่ยวกับสถิติสำหรับการสร้างซอฟต์แวร์ ฉันมีข้อมูลสำหรับแต่ละบิลด์เมื่อผ่าน / ไม่ผ่านและเวลาที่ผ่านไปและเราสร้าง ~ 200 ต่อสัปดาห์

อัตราความสำเร็จนั้นง่ายต่อการรวบรวมฉันสามารถพูดได้ว่า 45% ผ่านไปสัปดาห์ใดก็ตาม แต่ฉันต้องการรวมเวลาที่ผ่านไปด้วยและฉันต้องการตรวจสอบให้แน่ใจว่าฉันไม่ได้บิดเบือนข้อมูลที่ไม่ดีเกินไป คิดว่าฉันควรถามข้อดี :-)

บอกว่าฉันมี 10 ช่วงเวลา พวกเขาเป็นตัวแทนของทั้งสองกรณีผ่านและล้มเหลว บางงานสร้างล้มเหลวทันทีซึ่งทำให้ระยะเวลาสั้นผิดปกติ บางคนหยุดระหว่างการทดสอบและหมดเวลาในที่สุดทำให้เกิดระยะเวลาที่ยาวนานมาก เราสร้างผลิตภัณฑ์ที่แตกต่างกันดังนั้นการสร้างที่ประสบความสำเร็จก็แตกต่างกันไประหว่าง 90 วินาทีและ 4 ชั่วโมง

ฉันอาจได้ชุดแบบนี้:

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

วิธีแรกของฉันคือการหาค่ามัธยฐานโดยเรียงลำดับชุดและเลือกค่ากลางในกรณีนี้ 7812 (ฉันไม่ได้ใส่ใจกับค่าเฉลี่ยเลขคณิตสำหรับชุดเลขคู่)

น่าเสียดายนี่ดูเหมือนจะสร้างความเปลี่ยนแปลงได้มากมายเนื่องจากฉันเลือกเพียงมูลค่าที่กำหนด ดังนั้นถ้าฉันจะแนวโน้มค่านี้มันจะกระเด้งประมาณระหว่าง 5,000-10,000 วินาทีขึ้นอยู่กับว่ารุ่นใดอยู่ที่ค่ามัธยฐาน

เพื่อทำให้เรื่องนี้ราบรื่นขึ้นฉันลองวิธีอื่น - ลบค่าผิดปกติแล้วคำนวณค่าเฉลี่ยของค่าที่เหลือ ฉันตัดสินใจที่จะแยกมันออกเป็น tertiles และทำงานเฉพาะตรงกลาง:

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

เหตุผลที่ฉันคิดว่าดีกว่านี้คือสองเท่า:

  • เราไม่ต้องการให้มีการดำเนินการใด ๆ กับงานสร้างที่เร็วขึ้น แต่ก็ไม่เป็นไร
  • งานสร้างที่ยาวที่สุดนั้นมีแนวโน้มว่าจะเกิดการหมดเวลาและจะอยู่ที่นั่นเสมอ เรามีกลไกอื่น ๆ เพื่อตรวจจับสิ่งเหล่านั้น

สำหรับฉันแล้วดูเหมือนว่านี่คือข้อมูลที่ฉันกำลังมองหา แต่ฉันกังวลว่าฉันได้รับความราบรื่นโดยการลบความจริง

การโต้เถียงนี้หรือไม่? เป็นวิธีการที่มีสติ?

ขอบคุณ!


คุณยังไม่ได้บอกว่าทำไมคุณถึงต้องการวัดเวลาที่ใช้ไป คุณต้องประเมินเวลารวมของเครื่องที่คุณจ่ายหรือไม่ คุณต้องประเมินจำนวนการเดินทางไปยังเครื่องชงกาแฟที่คุณสามารถทำได้หรือไม่? อะไรคือสิ่งที่คุณจะทำหากคุณรู้เวลา
StasK

นอกจากนี้หากคุณมีผลิตภัณฑ์ที่แตกต่างกันที่คุณสร้างขึ้นการกระดอนไปรอบ ๆ เป็นเรื่องธรรมชาติและคุณไม่ควรพยายามกำจัดมัน หากคุณมีการวัดความซับซ้อนของโครงการที่กำหนด (# ของไฟล์, # ของบรรทัดของรหัส, # ของกิจวัตร, ฯลฯ ) จากนั้นคุณอาจสนใจเวลาที่ผ่านไปตามปกติด้วยความซับซ้อนซึ่งอาจมีเสถียรภาพมากขึ้น ถ้าคุณต้องการทำให้มันมั่นคงและแบนเมื่อเวลาผ่านไปคุณจะไม่สามารถเรียนรู้ได้เมื่อคุณจำเป็นต้องดำเนินการ
StasK

@StasK: ขอบคุณสำหรับความคิดเห็นของคุณนี่เป็นข้อมูลที่มีค่า การกระทำเป็นที่รู้จักกันแล้ว: งานสร้างเหล่านี้จำนวนมากใช้เวลา waaaay นานเกินไปและเราควรพยายามทำให้เร็วขึ้น ฉันต้องการใช้การวัดโดยรวมเพื่อดูว่าสิ่งต่าง ๆ กำลังดีขึ้นหรือแย่ลง
Kim Gräsman

และใช่ฉันควรจะทำอย่างนี้โดยผลิตภัณฑ์ แต่ข้อมูลต้นฉบับไม่ได้รักษาข้อมูลนั้นดังนั้นฉันโกงตามสิ่งที่ฉันรู้เกี่ยวกับการกระจาย แน่นอนว่าสิ่งนี้อาจเปลี่ยนแปลงไปตามกาลเวลาและฉันอาจต้องคิดใหม่
Kim Gräsman

ฉันคิดว่าคุณมีสามกลุ่มในข้อมูลของคุณ: (i) การสร้างที่สร้าง (ii) งานสร้างที่ล้มเหลว (และคุณบอกว่าพวกเขามีแนวโน้มที่จะล้มเหลวค่อนข้างเร็ว) และ (iii) งานสร้างที่วางสาย (หรือเกือบจะ) - และอาจเป็นงานหลักหากไม่ใช่กลุ่มเดียวที่คุณต้องการดำเนินการ การวัดเวลาโดยรวมอาจไม่ใช่เรื่องใหญ่ แต่บางอย่างเช่นบิวด์ที่ยาวที่สุดอันดับ 10 หรือเปอร์เซ็นต์ไทล์สูงสุดของการกระจายเวลาบิลด์อาจเป็นตัวชี้วัดที่ดีกว่าว่าอะไรคือการกระจายที่มากที่สุดที่คุณสนใจ นั่นคือสิ่งที่ EPA ใช้ในการตรวจสอบมลภาวะ
StasK

คำตอบ:


8

แนวทางของคุณเหมาะสมกับฉันโดยคำนึงถึงเป้าหมายของคุณด้วย มันง่ายตรงไปตรงมาทำให้งานเสร็จและคุณอาจไม่ต้องการเขียนบทความทางวิทยาศาสตร์เกี่ยวกับเรื่องนี้

สิ่งหนึ่งที่หนึ่งควรเสมอทำในการจัดการกับค่าผิดปกติคือการเข้าใจพวกเขาและคุณทำอยู่แล้วได้งานที่ดีเกี่ยวกับเรื่องนี้ วิธีที่เป็นไปได้ในการปรับปรุงแนวทางของคุณคือ: คุณสามารถใช้ข้อมูลเกี่ยวกับงานสร้างที่แขวนอยู่ได้หรือไม่? คุณพูดถึงว่าคุณมี "กลไกอื่น ๆ เพื่อตรวจจับสิ่งเหล่านี้" - คุณสามารถตรวจจับพวกมันแล้วเอาเฉพาะสิ่งเหล่านั้นออกจากตัวอย่างได้หรือไม่?

มิฉะนั้นถ้าคุณมีข้อมูลมากขึ้นคุณอาจนึกถึงการลบไม่ใช่ tertiles แต่เป็น quintiles ... แต่ในบางจุดสิ่งนี้อาจไม่สร้างความแตกต่างมากนัก


เมื่อฉันพูดถึงกลไก "อื่น ๆ " ฉันหมายถึงความแตกต่างอย่างสิ้นเชิงนอกชุดข้อมูลนี้ดังนั้นฉันจึงไม่สามารถตัดสินใจได้ตามที่นี่ เรารวบรวมข้อมูลทุกวันและเราได้รับเพียง 50 บิวด์ต่อวันดังนั้นฉันคิดว่า quintiles อาจให้ข้อมูลน้อยเกินไป แต่ขอบคุณสำหรับคำแนะนำฉันสามารถทดสอบได้!
Kim Gräsman

13

สิ่งที่คุณกำลังทำอยู่เป็นที่รู้จักกันหมายถึงการตัดแต่ง

อย่างที่คุณทำมันเป็นเรื่องธรรมดาที่จะตัดแต่งสัดส่วนที่เท่ากันจากแต่ละด้าน (สัดส่วนการตัดแต่ง)

คุณสามารถเล็มอะไรก็ได้ระหว่าง 0% (ค่าเฉลี่ยทั่วไป) สูงสุด (เกือบ) 50% (ซึ่งให้ค่ามัธยฐาน) ตัวอย่างของคุณมีการตัดแต่ง 30% จากปลายแต่ละด้าน

ดูคำตอบนี้และที่เกี่ยวข้อง บทความวิกิพีเดีย

[แก้ไข: ดูการสนทนาที่ยอดเยี่ยมของ Nick Cox ในหัวข้อนี้]

มันค่อนข้างสมเหตุสมผลการประมาณตำแหน่งที่ค่อนข้างแข็งแกร่ง โดยทั่วไปถือว่าเหมาะสมกว่าสำหรับการแจกแจงแบบสมมาตรใกล้กว่าแบบเบ้สูง แต่ถ้ามันเหมาะกับวัตถุประสงค์ของคุณ * ไม่มีเหตุผลที่จะไม่ใช้มัน จำนวนที่ดีที่สุดในการตัดแต่งขึ้นอยู่กับประเภทของการกระจายที่คุณมีและคุณสมบัติที่คุณต้องการ

* ยังไม่ชัดเจนว่าคุณต้องการประเมินอะไรที่นี่

มีวิธีการที่แข็งแกร่งอื่น ๆ จำนวนมากเพื่อสรุป 'ศูนย์กลาง' ของการแจกแจงซึ่งคุณอาจพบว่ามีประโยชน์ (เช่น M-estimators อาจมีประโยชน์สำหรับคุณบ้าง)

[หากคุณต้องการการวัดความแปรปรวนที่สอดคล้องกับค่าเฉลี่ยที่ถูกตัดของคุณค่าเบี่ยงเบนมาตรฐานWinsorizedอาจเป็นประโยชน์สำหรับคุณ (โดยเฉพาะเมื่อคำนวณ sd ให้แทนที่ค่าที่คุณจะตัดเมื่อตัดค่าที่มากที่สุดที่คุณต้องการ ไม่ได้ถูกตัดออก)]


ฉันไม่ได้ตรวจสอบรูปร่างการกระจายตัวของฉันจริง ๆ ฉันคิดว่ามันแตกต่างกันไปในแต่ละสัปดาห์โดยขึ้นอยู่กับว่าผู้คนเปลี่ยนแปลงอะไร ในความเป็นจริงมันอาจจะเบ้สูง
Kim Gräsman

ขอบคุณสำหรับการตั้งชื่อให้กับงานแฮกของฉัน btw มันเป็นแรงบันดาลใจให้มั่นใจ :-)
Kim Gräsman

2

อีกวิธีหนึ่งคือการคำนวณค่ามัธยฐานของค่าเฉลี่ยของจำนวนทั้งหมดหรือทำ bootstrapping

ปรับปรุง:

ค่ามัธยฐานของทุก avarages คู่เรียกว่าประมาณการฮอดจ์-มาห์ ตัวประมาณนี้มักจะมีประสิทธิภาพสูง นี้รายการสารานุกรมโดยสกอตต์ลิตร Hershberger พูดว่า:

ในขณะที่ตัวประมาณค่ามัธยฐานและค่าเฉลี่ยของ Hodges-Lehmann ต่างก็เหมาะสมกว่าค่าเฉลี่ยตัวอย่างสำหรับการแจกแจงแบบไม่สมมาตรค่าประมาณของ Hodges-Lehmann นั้นมีประสิทธิภาพเชิงสัมพัทธ์เชิงเส้นตรงมากกว่าค่าเฉลี่ย

การบูตสแตรปอาจมีความเกี่ยวข้องน้อยกว่าและต้องใช้การคำนวณมากขึ้น แต่คุณสามารถสุ่มตัวอย่างข้อมูลขนาดเล็กด้วยการแทนที่และคำนวณค่าเฉลี่ยของตัวอย่างย่อยนั้นทำได้หลายครั้งและคำนวณค่ามัธยฐานของค่าเฉลี่ยทั้งหมด

ในทั้งสองกรณีคุณไม่จำเป็นต้องเลือกค่าระหว่างค่าของข้อมูลของคุณอีกต่อไป (เมื่อคุณคำนวณค่ามัธยฐานสามัญ) แต่คุณเลือกค่าเฉลี่ยจากชุดย่อยของข้อมูลแทน


2
คุณสามารถอธิบายข้อดีและข้อเสียของวิธีการเหล่านี้ได้ไหม คำตอบแบบหนึ่งบรรทัดนั้นไม่เพียงพอ
StasK

1
ฉันพยายามอัปเดตพร้อมคำอธิบายเพิ่มเติมแล้ว
ฟินน์Årup Nielsen

ค่าเฉลี่ยทั้งคู่และการบูตสแตรปปิ้งดูเหมือนจะเกี่ยวข้องกับการคำนวณใหม่มากกว่าชุดข้อมูลทั้งหมด โดยทั่วไปตัวอย่างจะค่อนข้างเล็ก (<500 ค่า) ดังนั้นอาจไม่ใช่ปัญหา แต่ดูเหมือนจะซับซ้อนกว่า เป็นการดีที่จะทราบว่ามีวิธีการเพิ่มเติมในการทดสอบด้วยถ้าค่าเฉลี่ยที่ตัดออกไปนั้นไม่ตรงเกินไป ขอบคุณ!
Kim Gräsman

1

ดูเหมือนว่าสิ่งที่คุณกำลังทำ: สำหรับข้อมูลที่ฉันใช้กระบวนการต่อไปนี้ค่อนข้างบ่อยเพื่อจุดประสงค์ที่คล้ายกัน: แต่ฉันเคยสนใจใน Upper Outliers จริงๆเท่านั้น

คำนวณสรุปหมายเลขห้า: Min, Q1, Median, Q3, Max คำนวณ Interquartile Range: Q3-Q1 ตั้งค่า 'รั้ว' ค่าภายนอกของคุณที่ Q1-IQR * X และ Q3 + IQR * X: โดยที่ค่าที่เหมาะสมของ 'X' คือ 1.5

การใช้ Excel และตัวเลขของคุณข้างต้น (ใช้ 1.5 สำหรับ 'X' **) จะได้ค่าที่สูงกว่าหนึ่งค่า: 21011

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

ดังนั้นรั้วด้านล่างที่นี่ไม่มีประโยชน์หรือเป็นจริงสำหรับตัวอย่างของคุณ: ซึ่งสำรองจุดที่โพสต์อื่น ๆ เกี่ยวกับความสำคัญของการทำความเข้าใจความหมายของข้อมูลเฉพาะของคุณ

(** พบการอ้างอิงหนึ่งข้อสำหรับกฎ '1.5': ฉันไม่ได้บอกว่าเป็นเรื่องน่าเชื่อถือ แต่ดูเหมือนจะเป็นจุดเริ่มต้นที่สมเหตุสมผลสำหรับฉัน: http://statistics.about.com/od/Descriptive-Statistics/a/ อะไรคือ -The- Interquartile-Range-Rule.htm )

นอกจากนี้คุณยังสามารถตัดสินใจ (อาจ) เพียงใช้จุดข้อมูลที่อยู่ใน IQR เอง: สิ่งนี้ดูเหมือนจะให้ผลลัพธ์ที่สมเหตุสมผล (ซึ่งการเป็นสมาชิกของวิธีการของคุณคล้ายกันมาก)

ใช้ข้อมูลเดียวกันนี้จะวางจุดข้อมูลต่อไปนี้ใน 'พื้นที่ที่น่าสนใจ':

7812
3014
13400
21011
8993
8378
9100

บน Boxplot: จุดเหล่านี้จะอยู่ในส่วนของกล่อง (แทนที่จะเป็นส่วนหนวด) ของแผนภาพ

ที่สามารถเห็นได้ว่ารายการนี้มีบางรายการที่ไม่ได้อยู่ในรายการเดิมของคุณ ฉันไม่สามารถพูดได้ว่ารายการใดรายการหนึ่งมีความแม่นยำมากขึ้น แต่อย่างใด (ลงมาอีกครั้งเพื่อทำความเข้าใจชุดข้อมูลของคุณ)


ขอบคุณนี่ดูเหมือนจะเป็นหลักการที่ใกล้เคียงกับสิ่งที่ฉันทำอยู่แล้ว วิธีนี้จะดีกว่าการแบ่งพาร์ติชั่นชุดข้อมูลอย่างไร?
Kim Gräsman

1
ฉันไม่สามารถพูดได้ว่าวิธีใดวิธีหนึ่งจะดีกว่าหรือไม่: ฉันแนะนำสิ่งนี้ตามสิ่งที่ฉันได้อ่านในสถิติหนังสือ / เว็บไซต์ สิ่งหนึ่ง (ฉันคิดว่า) วิธีการที่เพิ่มคืออนุญาตให้คุณปรับ 'รั้ว' ให้เหมาะกับสิ่งที่คุณรู้สึกว่าเหมาะสม (ปรับ 1.5 เท่า) ที่เพิ่งรับช่วงกลางปีที่สามอาจมีความเสี่ยงมากกว่าที่จะรวมค่าที่อาจเกิดขึ้นสูง (ซึ่งอาจจำแนกได้ดีกว่านอกรั้ว) ..... แต่ฉันไม่สามารถพูดได้อย่างแน่นอน อีกสิ่งหนึ่งที่เกี่ยวกับการใช้ Quartiles คือการสรุป 5 หมายเลขค่อนข้างเข้าใจได้ดีและใช้กันทั่วไป
monojohnny

ขอบคุณสำหรับรายละเอียดที่เพิ่มเข้ามา! ฉันทำสิ่งนี้ใน Python ดังนั้นฉันจึงมีฟังก์ชั่นที่ฉันแบ่งพาร์ติชันชุดข้อมูลออกเป็นส่วน N แล้วดึงส่วนตรงกลางออกมา เป็นการเปลี่ยนแปลงตัวละครตัวเดียวเพื่อให้พาร์ติชัน 5 หรือ 7 แทน แต่ประเด็นของคุณก็ถูกนำมาใช้อย่างดีและเป็นการดีที่จะเห็นวิธีการทั่วไปในการเข้าถึงปัญหานี้ ขอบคุณอีกครั้ง.
Kim Gräsman

ฟังดูดีสำหรับฉัน: ฉันจะเพิ่มอีกหนึ่งสิ่งเพื่อเน้นเกี่ยวกับการใช้ควอไทล์และรั้ว (แทนที่จะมีพาร์ทิชันตัวแปร) - คือพวกเขาทำแผนที่ตรงไปที่ boxplots: en.wikipedia.org/wiki/Box_plotซึ่งอนุญาต (ในหมู่สิ่งอื่น ๆ ) วิธีมาตรฐานในการเปรียบเทียบการแจกแจงที่ต่างกันแบบกราฟิก
monojohnny
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.