คำถามติดแท็ก time-series

อนุกรมเวลาเป็นข้อมูลที่สังเกตได้ในช่วงเวลาหนึ่ง (ไม่ว่าจะเป็นเวลาต่อเนื่องหรือในช่วงเวลาที่ไม่ต่อเนื่อง)

5
การทำนายอนุกรมเวลาโดยใช้ ARIMA กับ LSTM
ปัญหาที่ฉันจัดการคือการทำนายค่าอนุกรมเวลา ฉันกำลังดูซีรีส์ครั้งเดียวในแต่ละครั้งและตามตัวอย่างเช่น 15% ของข้อมูลอินพุตฉันต้องการทำนายค่าในอนาคต จนถึงตอนนี้ฉันเจอสองรุ่น: LSTM (หน่วยความจำระยะสั้นระยะยาวคลาสของเครือข่ายประสาทที่เกิดขึ้นอีก) ARIMA ฉันลองทั้งสองและอ่านบทความเกี่ยวกับพวกเขา ตอนนี้ฉันพยายามทำความเข้าใจให้ดีขึ้นเกี่ยวกับวิธีเปรียบเทียบทั้งสอง สิ่งที่ฉันได้พบจนถึง: LSTM ทำงานได้ดีขึ้นหากเราจัดการกับข้อมูลจำนวนมากและมีข้อมูลการฝึกอบรมเพียงพอในขณะที่ ARIMA จะดีกว่าสำหรับชุดข้อมูลขนาดเล็ก (ถูกต้องหรือไม่) ARIMA ต้องการชุดพารามิเตอร์(p,q,d)ที่ต้องคำนวณตามข้อมูลในขณะที่ LSTM ไม่ต้องการตั้งค่าพารามิเตอร์ดังกล่าว อย่างไรก็ตามมีพารามิเตอร์หลายอย่างที่เราต้องปรับแต่งสำหรับ LSTM แก้ไข:หนึ่งความแตกต่างที่สำคัญระหว่างสองที่ฉันสังเกตเห็นในขณะที่อ่านบทความที่ดีที่นี่คือ ARIMA สามารถทำงานได้ดีในซีรีส์เวลานิ่ง (ที่ไม่มีฤดูกาลแนวโน้มและอื่น ๆ ) และคุณต้องดูแลว่าถ้า ต้องการใช้ ARIMA นอกเหนือจากคุณสมบัติที่กล่าวถึงข้างต้นฉันไม่สามารถหาจุดหรือข้อเท็จจริงอื่นใดที่สามารถช่วยฉันเลือกรูปแบบที่ดีที่สุดได้ ฉันจะขอบคุณจริง ๆ ถ้ามีคนช่วยฉันค้นหาบทความเอกสารหรือสิ่งอื่น ๆ (ไม่มีโชคจนถึงตอนนี้มีเพียงความคิดเห็นทั่วไปบางส่วนที่นี่และที่นั่นและไม่มีอะไรจากการทดลอง) ฉันต้องพูดถึงว่าตอนแรกฉันกำลังจัดการกับข้อมูลสตรีมมิ่ง แต่ตอนนี้ฉันกำลังใช้ชุดข้อมูล NABซึ่งรวมถึง 50 ชุดข้อมูลที่มีขนาดสูงสุด 20k จุดข้อมูล

10
การเรียนรู้ของเครื่อง - คุณสมบัติด้านวิศวกรรมจากข้อมูลวันที่ / เวลา
แนวทางปฏิบัติทั่วไปที่ดีที่สุดในการจัดการข้อมูลเวลาสำหรับแอปพลิเคชันการเรียนรู้ของเครื่องคืออะไร ตัวอย่างเช่นหากในชุดข้อมูลมีคอลัมน์ที่มีการประทับเวลาของเหตุการณ์เช่น "2014-05-05" คุณจะแยกคุณลักษณะที่มีประโยชน์จากคอลัมน์นี้ได้อย่างไร? ขอบคุณล่วงหน้า!

4
การเพิ่มคุณสมบัติให้กับ Time Series รุ่น LSTM
ได้รับการอ่านขึ้นเล็กน้อยเกี่ยวกับ LSTM และการใช้งานของพวกเขาสำหรับชุดเวลาและมันน่าสนใจ แต่ก็ยากในเวลาเดียวกัน สิ่งหนึ่งที่ฉันมีปัญหาในการทำความเข้าใจคือวิธีการเพิ่มคุณลักษณะเพิ่มเติมลงในรายการคุณลักษณะของอนุกรมเวลาอยู่แล้ว สมมติว่าคุณมีชุดข้อมูลของคุณเช่นนี้: T-3, T-2, T-1, เอาท์พุท ตอนนี้ให้บอกว่าคุณรู้ว่าคุณมีคุณสมบัติที่มีผลต่อการส่งออก แต่ไม่จำเป็นต้องเป็นคุณลักษณะอนุกรมเวลาให้บอกว่าสภาพอากาศภายนอก นี่คือสิ่งที่คุณสามารถเพิ่มได้และ LSTM จะสามารถแยกแยะความแตกต่างของอนุกรมเวลาและอะไรไม่ได้

2
วิธีการจัดการกับอนุกรมเวลาที่เปลี่ยนแปลงในฤดูกาลหรือรูปแบบอื่น ๆ ?
พื้นหลัง ฉันกำลังทำงานเกี่ยวกับชุดข้อมูลเวลาของการอ่านมาตรวัดพลังงาน ความยาวของซีรีย์แตกต่างกันไปตามเมตร - สำหรับบางคนที่ฉันมีหลายปีอื่น ๆ เพียงไม่กี่เดือน ฯลฯ หลายคนแสดงฤดูกาลที่สำคัญและมักจะหลายชั้น - ภายในวันสัปดาห์หรือปี หนึ่งในสิ่งที่ฉันได้ทำคือการจัดกลุ่มของอนุกรมเวลาเหล่านี้ งานของฉันเป็นงานวิชาการในขณะนี้และในขณะที่ฉันทำการวิเคราะห์ข้อมูลอื่น ๆ เช่นกันฉันมีเป้าหมายที่เฉพาะเจาะจงในการทำคลัสเตอร์บางอย่าง ฉันเริ่มงานแรกโดยที่ฉันคำนวณคุณสมบัติต่าง ๆ (เปอร์เซ็นต์ที่ใช้ในวันหยุดสุดสัปดาห์กับวันทำงานเปอร์เซ็นต์ที่ใช้ในช่วงเวลาต่าง ๆ เป็นต้น) จากนั้นฉันก็ไปดูที่การใช้ Dynamic Time Warping (DTW) เพื่อให้ได้ระยะห่างระหว่างซีรีย์ที่แตกต่างกันและการจัดกลุ่มตามค่าที่แตกต่างกันและฉันก็พบเอกสารหลายฉบับที่เกี่ยวข้องกับเรื่องนี้ คำถาม การเปลี่ยนแปลงตามฤดูกาลในซีรีส์ที่ระบุจะทำให้การจัดกลุ่มของฉันไม่ถูกต้องหรือไม่ และถ้าเป็นเช่นนั้นฉันจะจัดการกับมันได้อย่างไร ความกังวลของฉันคือระยะทางที่ได้รับจาก DTW อาจทำให้เข้าใจผิดในกรณีที่รูปแบบในอนุกรมเวลาเปลี่ยนไป สิ่งนี้อาจนำไปสู่การทำคลัสเตอร์ที่ไม่ถูกต้อง ในกรณีที่ข้างต้นไม่ชัดเจนให้พิจารณาตัวอย่างเหล่านี้: ตัวอย่างที่ 1 มาตรวัดมีการอ่านค่าต่ำตั้งแต่เที่ยงคืนจนถึง 8 โมงเช้าการอ่านเพิ่มขึ้นอย่างรวดเร็วในชั่วโมงถัดไปและอยู่สูงจาก 9.00 น. ถึง 17.00 น. จากนั้นลดลงอย่างรวดเร็วในชั่วโมงถัดไปจากนั้นพักต่ำจาก 18.00 น. จนถึงเที่ยงคืน มิเตอร์ยังคงรูปแบบนี้อย่างต่อเนื่องทุกวันเป็นเวลาหลายเดือน แต่จากนั้นเปลี่ยนเป็นรูปแบบที่การอ่านอยู่ในระดับสม่ำเสมอตลอดทั้งวัน …

1
การทำนายอนุกรมเวลาโดยใช้ LSTM: ความสำคัญของการสร้างอนุกรมเวลาให้ไม่หยุดนิ่ง
ในลิงค์นี้เกี่ยวกับ Stationarity และดิฟเฟอเรนเชียลมันถูกกล่าวถึงว่าโมเดลเช่น ARIMA ต้องการอนุกรมเวลาสำหรับการพยากรณ์เนื่องจากคุณสมบัติทางสถิติเช่นค่าเฉลี่ยความแปรปรวนความสัมพันธ์แบบออโตคอร์เรชั่น ฯลฯ คงที่ตลอดเวลา เนื่องจาก RNNs มีความสามารถที่ดีกว่าในการเรียนรู้ความสัมพันธ์ที่ไม่ใช่เชิงเส้น ( ตามที่กำหนดไว้ที่นี่: สัญญาของเครือข่ายประสาทที่เกิดขึ้นอีกสำหรับการพยากรณ์อนุกรมเวลา ) และทำงานได้ดีกว่าโมเดลอนุกรมเวลาทั่วไปเมื่อข้อมูลมีขนาดใหญ่ ข้อมูลจะมีผลต่อผลลัพธ์ คำถามที่ฉันต้องรู้คำตอบมีดังนี้: ในกรณีที่มีรูปแบบการพยากรณ์อนุกรมเวลาแบบดั้งเดิมความคงที่ของข้อมูลอนุกรมเวลาทำให้ง่ายต่อการคาดการณ์ว่าทำไมและอย่างไร ในขณะที่สร้างแบบจำลองการทำนายอนุกรมเวลาโดยใช้LSTM จำเป็นหรือไม่ที่จะต้องทำให้ข้อมูลอนุกรมเวลาคงที่ ถ้าเป็นเช่นนั้นทำไม

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

3
กำลังมองหาแพ็คเกจที่ดีสำหรับการตรวจจับความผิดปกติในอนุกรมเวลา
มีแพ็คเกจโอเพ่นซอร์สที่ครอบคลุม (โดยเฉพาะอย่างยิ่งใน python หรือ R) ที่สามารถใช้สำหรับการตรวจจับความผิดปกติในอนุกรมเวลาหรือไม่? มีแพ็คเกจ SVM หนึ่งคลาสใน scikit-Learn แต่ไม่ใช่สำหรับข้อมูลอนุกรมเวลา ฉันกำลังมองหาแพ็คเกจที่มีความซับซ้อนมากขึ้นตัวอย่างเช่นใช้เครือข่ายแบบเบย์เพื่อตรวจจับสิ่งผิดปกติ

5
ไลบรารี Python เพื่อใช้โมเดล Markov ที่ซ่อนอยู่
ห้องสมุดไพ ธ อนที่มีเสถียรภาพอะไรบ้างที่ฉันสามารถใช้เพื่อสร้างโมเดลมาร์คอฟที่ซ่อนอยู่ได้ ฉันต้องการเอกสารที่ดีพอสมควรเพราะฉันไม่เคยใช้รุ่นนี้มาก่อน อีกวิธีหนึ่งมีวิธีที่ตรงกว่าในการทำการวิเคราะห์อนุกรมเวลาบนชุดข้อมูลโดยใช้ HMM หรือไม่

1
RNN ใช้ซีรี่ส์อนุกรมหลายเวลา
ฉันกำลังพยายามสร้างโครงข่ายประสาทเทียมโดยใช้อนุกรมเวลาเป็นอินพุทเพื่อฝึกอบรมตามประเภทของแต่ละซีรีส์ ฉันอ่านว่าการใช้ RNNs คุณสามารถแบ่งอินพุตเป็นแบทช์และใช้ทุกจุดของอนุกรมเวลาเป็นเซลล์ประสาทส่วนบุคคลและในที่สุดก็ฝึกฝนเครือข่าย สิ่งที่ฉันพยายามทำคือใช้หลายครั้งเป็นอินพุต ตัวอย่างเช่นคุณอาจได้รับอินพุตจากเซ็นเซอร์สองตัว (ดังนั้นอนุกรมสองเวลา) แต่ฉันต้องการใช้ทั้งสองอย่างเพื่อให้ได้ผลลัพธ์สุดท้าย นอกจากนี้ฉันไม่ได้พยายามทำนายค่าในอนาคตของอนุกรมเวลาฉันพยายามจำแนกตามค่าทั้งหมด ฉันจะแก้ไขปัญหานี้ได้อย่างไร มีวิธีใช้อนุกรมเวลาหลายชุดเป็นอินพุตไปยัง RNN หรือไม่? ฉันควรจะลองรวมอนุกรมเวลาเข้าด้วยกันหรือไม่? หรือฉันควรใช้สองเครือข่ายประสาทที่แตกต่างกัน? และหากวิธีการสุดท้ายนี้ถูกต้องหากจำนวนชุดเวลาเพิ่มขึ้นนั่นจะไม่ทำให้คอมพิวเตอร์เข้มข้นเกินไปใช่ไหม
14 time-series  rnn 

4
ช่วงเวลาการทำนายรอบการคาดการณ์อนุกรมเวลา LSTM
มีวิธีการคำนวณช่วงเวลาการทำนาย (การแจกแจงความน่าจะเป็น) รอบการพยากรณ์อนุกรมเวลาจากเครือข่ายประสาท LSTM (หรือการเกิดขึ้นอีกครั้ง) หรือไม่? ตัวอย่างเช่นฉันคาดการณ์ 10 ตัวอย่างในอนาคต (t + 1 ถึง t + 10) ตามตัวอย่างที่สังเกตได้ 10 รายการล่าสุด (t-9 ถึง t) ฉันคาดว่าการทำนายที่ t + 1 จะมากกว่านี้ แม่นยำกว่าการทำนายที่ t + 10 โดยปกติแล้วหนึ่งอาจวาดแถบข้อผิดพลาดรอบการทำนายเพื่อแสดงช่วงเวลา ด้วยโมเดล ARIMA (ภายใต้สมมติฐานของข้อผิดพลาดแบบกระจายทั่วไป) ฉันสามารถคำนวณช่วงการทำนาย (เช่น 95%) รอบค่าที่ทำนายแต่ละค่า ฉันสามารถคำนวณแบบเดียวกัน (หรือบางอย่างที่เกี่ยวข้องกับช่วงเวลาการทำนาย) จากแบบจำลอง LSTM ได้หรือไม่ ฉันทำงานกับ LSTM ใน Keras / Python …

1
แปลงคอลัมน์ pandas ของ int เป็นประเภทข้อมูลประทับเวลา
ฉันมีชื่อไฟล์ที่เหนือสิ่งอื่นใดมีคอลัมน์ของจำนวนมิลลิวินาทีที่ผ่านไปตั้งแต่ปี 1970-1-1 ฉันต้องการแปลงคอลัมน์ของ ints นี้เป็นข้อมูลการประทับเวลาดังนั้นในที่สุดฉันก็สามารถแปลงมันเป็นคอลัมน์ของข้อมูลวันที่และเวลาโดยเพิ่มชุดคอลัมน์เวลาลงในชุดที่ประกอบด้วยค่าวันที่และเวลาทั้งหมดสำหรับ 1970-1-1 ฉันรู้วิธีแปลงชุดสตริงเป็นข้อมูล datetime (pandas.to_datetime) แต่ฉันไม่สามารถค้นหาหรือคิดวิธีแก้ปัญหาใด ๆ ในการแปลงทั้งคอลัมน์ของintsเป็น datetime data หรือข้อมูลประทับเวลา

1
รู้จักไวยากรณ์ในลำดับของโทเค็นฟัซซี่
ฉันมีเอกสารข้อความที่มีรายการเป็นส่วนใหญ่ แต่ละรายการเป็นกลุ่มของโทเค็นหลายประเภทที่แตกต่างกัน: FirstName, นามสกุล, วันเกิด, หมายเลขโทรศัพท์, เมือง, อาชีพ, ฯลฯ โทเค็นคือกลุ่มของคำ รายการสามารถวางได้หลายบรรทัด รายการจากเอกสารจะมีรูปแบบโทเค็นเดียวกัน แต่ไม่จำเป็นต้องเหมือนกันทุกประการ อาจเป็นโทเค็นบางรายการมากขึ้น / น้อยลงระหว่างไอเท็มรวมถึงภายในไอเท็ม FirstName LastName BirthDate PhoneNumber Occupation City FirstName LastName BirthDate PhoneNumber PhoneNumber Occupation City FirstName LastName BirthDate PhoneNumber Occupation UnrecognizedToken FirstName LastName PhoneNumber Occupation City FirstName LastName BirthDate PhoneNumber City Occupation เป้าหมายคือการระบุไวยากรณ์ที่ใช้เช่น Occupation City และในท้ายที่สุดระบุรายการทั้งหมดแม้คิดว่าพวกเขาไม่ตรงกัน …

1
จำแนกลูกค้าตามคุณสมบัติ 2 อย่างและช่วงเวลาของเหตุการณ์
ฉันต้องการความช่วยเหลือในขั้นตอนต่อไปของฉันในขั้นตอนวิธีที่ฉันออกแบบ เนื่องจาก NDA ฉันไม่สามารถเปิดเผยได้มากนัก แต่ฉันจะพยายามเข้าใจและเข้าใจได้ทั่วไป โดยทั่วไปหลังจากหลายขั้นตอนในอัลกอริทึมฉันมีสิ่งนี้: สำหรับลูกค้าแต่ละรายที่ฉันมีและกิจกรรมที่ทำในช่วงเดือนแรกในช่วงแรกฉันได้จัดกลุ่มเหตุการณ์เป็นหลายหมวดหมู่ (ลูกค้าแต่ละรายจะมีเหตุการณ์แยกออกเป็นหมวดหมู่ที่แยกจาก 1 เป็น x เป็น x ระหว่าง 1 ถึง 25 โดยทั่วไปประเภทแรกจะมีความหนาแน่นของกิจกรรมมากกว่าประเภทอื่น) สำหรับแต่ละหมวดหมู่และลูกค้าฉันได้สร้างอนุกรมเวลารวมเหตุการณ์ของเดือนต่อชั่วโมง (รับรูปแบบของเมื่อเหตุการณ์เหล่านี้เสร็จสิ้น) นอกจากนี้ฉันกำลังใช้ตัวแปร normalizing สองสามตัวตามจำนวนวันในหนึ่งเดือน (30 วัน) ที่ผู้ชายทำกิจกรรมอย่างน้อยหนึ่งเหตุการณ์และจำนวนวันที่มีเหตุการณ์อย่างน้อยหนึ่งเหตุการณ์ในจำนวนวันอย่างน้อยหนึ่งเหตุการณ์ เหตุการณ์ (รวมกลุ่มทั้งหมด) คนแรกให้ฉันอัตราส่วนของการใช้งานของลูกค้าในช่วงเดือนและที่สองน้ำหนักหมวดหมู่กับคนอื่น ๆ ตารางสุดท้ายมีลักษณะเช่นนี้ |*Identifier*| *firstCat* | *feature1* | *feature2* | { *(TIME SERIES)* } CustomerID | ClusterID | DaysOver30 | DaysOverTotal | …

2
อนุกรมเวลาแบบไม่สม่ำเสมอ
ฉันมีตัวแปรต่อเนื่องสุ่มตัวอย่างในช่วงเวลาหนึ่งปีในช่วงเวลาที่ผิดปกติ บางวันมีมากกว่าหนึ่งการสังเกตต่อชั่วโมงในขณะที่ช่วงเวลาอื่นไม่มีอะไรเป็นวัน สิ่งนี้ทำให้ยากต่อการตรวจสอบรูปแบบในอนุกรมเวลาเนื่องจากบางเดือน (ตัวอย่างเช่นเดือนตุลาคม) มีการสุ่มตัวอย่างสูงในขณะที่คนอื่นไม่ได้ คำถามของฉันคืออะไรจะเป็นวิธีที่ดีที่สุดในการสร้างแบบจำลองเวลานี้ ฉันเชื่อว่าเทคนิคการวิเคราะห์อนุกรมเวลาส่วนใหญ่ (เช่น ARMA) ต้องการความถี่คงที่ ฉันสามารถรวมข้อมูลเพื่อให้มีตัวอย่างคงที่หรือเลือกชุดย่อยของข้อมูลที่มีรายละเอียดมาก ด้วยตัวเลือกทั้งสองฉันจะพลาดข้อมูลบางส่วนจากชุดข้อมูลดั้งเดิมที่สามารถเปิดเผยรูปแบบที่แตกต่าง แทนที่จะย่อยสลายซีรีส์ในรอบฉันสามารถป้อนข้อมูลโมเดลด้วยชุดข้อมูลทั้งหมดและคาดว่าจะรับรูปแบบ ตัวอย่างเช่นฉันแปลงชั่วโมงวันทำงานและเดือนเป็นตัวแปรเด็ดขาดและลองการถดถอยหลายครั้งด้วยผลลัพธ์ที่ดี (R2 = 0.71) ฉันมีความคิดว่าเทคนิคการเรียนรู้ด้วยเครื่องจักรเช่น ANN สามารถเลือกรูปแบบเหล่านี้ได้จากอนุกรมเวลาที่ไม่สม่ำเสมอ แต่ฉันสงสัยว่ามีใครลองดูบ้างและสามารถให้คำแนะนำเกี่ยวกับวิธีที่ดีที่สุดในการแสดงรูปแบบเวลาในเครือข่ายประสาท

3
จะสร้างการเติบโตของเครือข่ายโซเชียลอย่างไร?
ฉันกำลังมองหาไลบรารี / เครื่องมือเพื่อให้เห็นภาพว่าเครือข่ายสังคมเปลี่ยนแปลงอย่างไรเมื่อมีการเพิ่มโหนด / ขอบใหม่เข้าไป หนึ่งในโซลูชั่นที่มีอยู่Sonia: Animator มันช่วยให้คุณทำภาพยนตร์เช่นนี้ เอกสารของ SoNIA บอกว่ามันพังในขณะนี้และนอกเหนือจากนี้ฉันต้องการโซลูชันที่ใช้ JavaScript แทน ดังนั้นคำถามของฉันคือคุณคุ้นเคยกับเครื่องมือใด ๆ หรือคุณสามารถชี้ให้ฉันไปที่ห้องสมุดบางแห่งที่จะทำให้งานนี้ง่ายที่สุดเท่าที่จะเป็นไปได้หรือไม่? หลังจากโพสต์คำถามนี้ฉันจะขุดลงในsigma.jsดังนั้นโปรดพิจารณาห้องสมุดนี้ด้วย โดยทั่วไปข้อมูลอินพุตของฉันจะเป็นดังนี้: time_elapsed; node1; node2 1; A; B 2; A; C 3; B; C ดังนั้นที่นี่เรามีสามจุดในเวลา (1, 2, 3), สามโหนด (A, B, C) และสามขอบซึ่งแสดงถึงการปิด triadic ระหว่างสามโหนดที่พิจารณา ยิ่งกว่านั้นทุกโหนดจะมีสองคุณลักษณะ (อายุและเพศ) ดังนั้นฉันจึงต้องการที่จะสามารถเปลี่ยนรูปร่าง / สีของโหนด นอกจากนี้หลังจากเพิ่มโหนดใหม่จะเป็นการดีที่จะมี ForceAtlas2 หรืออัลกอริทึมที่คล้ายกันเพื่อปรับเค้าโครงของกราฟ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.