Mulai menggunakan Azure Machine Learning Studio (klasik) di R

BERLAKU UNTUK:This is a check mark, which means that this article applies to Machine Learning Studio (classic).Machine Learning Studio (klasik) This is an X, which means that this article does not apply to Azure Machine Learning.Azure Machine Learning

Penting

Dukungan untuk Studio Azure Machine Learning (klasik) akan berakhir pada 31 Agustus 2024. Sebaiknya Anda transisi ke Azure Machine Learning sebelum tanggal tersebut.

Mulai 1 Desember 2021, Anda tidak akan dapat membuat sumber daya Studio Azure Machine Learning (klasik) baru. Hingga 31 Agustus 2024, Anda dapat terus menggunakan sumber daya Pembelajaran Mesin Studio (klasik) yang ada.

ML Dokumentasi Studio (klasik) sedang berhenti dan mungkin tidak diperbarui di masa mendatang.

Dalam tutorial ini, Anda mempelajari cara menggunakan Machine Learning Studio (klasik) untuk membuat, menguji, dan menjalankan kode R. Pada akhirnya, Anda akan memiliki solusi prakiraan lengkap.

  • Membuat kode untuk pembersihan dan transformasi data.
  • Analisis korelasi antara beberapa variabel dalam himpunan data kami.
  • Buat model prakiraan seri waktu musiman untuk produksi susu.

Azure Machine Learning Studio (klasik) berisi banyak modul pembelajaran mesin dan manipulasi data yang kuat. Dengan bahasa pemrograman R, kombinasi ini memberikan skalabilitas dan kemudahan penyebaran Azure Machine Learning Studio (klasik) dengan fleksibilitas dan analitik mendalam R.

Prakiraan adalah metode analitis yang banyak digunakan dan berguna. Penggunaan umum rentang dari memprediksi penjualan item musiman dan menentukan tingkat inventaris yang optimal hingga memprediksi variabel makroekonomi. Prakiraan biasanya dilakukan dengan model seri waktu. Data rangkaian waktu adalah data di mana nilai memiliki indeks waktu. Indeks waktu bisa teratur, misalnya, setiap bulan atau setiap menit. Indeks waktu juga bisa tidak teratur. Model rangkaian waktu didasarkan pada data rangkaian waktu. Bahasa pemrograman R berisi kerangka kerja yang fleksibel dan analitik yang luas untuk data rangkaian waktu.

Mendapatkan data

Dalam tutorial ini, Anda menggunakan data produksi dan penetapan harga susu California, yang mencakup informasi bulanan tentang produksi beberapa produk susu dan harga lemak susu, yang merupakan tolok ukur komoditas.

Data yang digunakan dalam artikel ini, bersama dengan skrip R, dapat diunduh dari MachineLearningSamples-Notebooks /studio-samples. Data dalam file cadairydata.csv awalnya disintesis dari informasi yang tersedia dari situs pasar susu University of Wisconsin.

Berinteraksi dengan bahasa komputer R di Azure Machine Learning Studio (klasik)

Bagian ini membawa Anda melalui beberapa dasar berinteraksi dengan bahasa pemrograman R di lingkungan Azure Machine Learning Studio (klasik). Bahasa komputer R menyediakan alat yang ampuh untuk membuat analitik dan modul manipulasi data yang disesuaikan dalam lingkungan Azure Machine Learning Studio (klasik).

Kami akan menggunakan RStudio untuk mengembangkan, menguji, dan men-debug kode R dalam skala kecil. Kode ini kemudian dipotong dan ditempelkan ke dalam modul Jalankan Skrip R yang siap dijalankan di Azure Machine Learning Studio (klasik).

Modul Jalankan Skrip R

Dalam Azure Machine Learning Studio (klasik), skrip R dijalankan dalam modul Jalankan Skrip R. Contoh modul Jalankan Skrip R di Azure Machine Learning Studio (klasik) ditampilkan di sini.

Screenshot that shows R programming language: The Execute R Script module selected in Machine Learning Studio (classic).

Gambar sebelumnya menunjukkan beberapa bagian kunci dari lingkungan Azure Machine Learning Studio (klasik) untuk bekerja dengan modul Jalankan Skrip R:

  • Modul dalam eksperimen ditampilkan di panel tengah.
  • Bagian atas panel kanan berisi jendela yang bisa Anda gunakan untuk menampilkan dan mengedit skrip R Anda.
  • Bagian bawah panel kanan memperlihatkan beberapa properti Jalankan Skrip R. Anda bisa menampilkan log kesalahan dan output dengan memilih area yang sesuai dari panel ini.

Kita akan membahas Jalankan Skrip R secara lebih rinci di sisa artikel ini.

Ketika Anda bekerja dengan fungsi R yang kompleks, kami sarankan Anda mengedit, menguji, dan men-debug di RStudio. Seperti halnya pengembangan perangkat lunak apa pun, perluas kode Anda secara bertahap dan uji pada kasus pengujian kecil dan sederhana. Kemudian potong dan tempel fungsi Anda ke dalam jendela skrip R modul Jalankan Skrip R. Pendekatan ini memungkinkan Anda untuk memanfaatkan lingkungan pengembangan terpadu (IDE) RStudio dan kekuatan Azure Machine Learning Studio (klasik).

Menjalankan kode R

Kode R apa pun dalam modul Jalankan Skrip R akan dijalankan saat Anda menjalankan eksperimen dengan memilih tombol Jalankan. Ketika eksekusi telah selesai, tanda centang muncul pada ikon Jalankan Skrip R.

Pengkodean Defensif R untuk Azure Machine Learning Studio (klasik)

Jika Anda mengembangkan kode R untuk, katakanlah, layanan web dengan menggunakan Azure Machine Learning Studio (klasik), Anda pasti harus merencanakan bagaimana kode Anda akan menangani input dan pengecualian data yang tidak terduga. Untuk menjaga kejelasan, kami belum memasukkan banyak hal dalam cara pemeriksaan atau penanganan pada pengecualian di sebagian besar contoh kode yang ditampilkan. Saat kami melanjutkan, kami akan memberi Anda beberapa contoh fungsi dengan menggunakan kemampuan penanganan pada pengecualian R.

Jika Anda memerlukan perawatan yang lebih lengkap dari penanganan pengecualian R, baca bagian yang berlaku dari buku oleh Wickham yang tercantum dalam Bacaan lebih lanjut.

Men-debug dan uji R di Azure Machine Learning Studio (klasik)

Uji dan debug kode R Anda dalam skalakan kecil di RStudio. Ada juga kasus di mana Anda harus melacak masalah kode R di Jalankan Skrip R itu sendiri. Selain itu, ada baiknya Anda memeriksa hasil di Azure Machine Learning Studio (klasik).

Output dari eksekusi kode R Anda dan pada platform Azure Machine Learning Studio (klasik) ditemukan terutama dalam output.log. Beberapa informasi tambahan error.log.

Jika terjadi kesalahan di Azure Machine Learning Studio (klasik) saat Anda menjalankan kode R, tindakan pertama Anda harus melihat kesalahan.log. File ini bisa memuat pesan kesalahan yang berguna untuk membantu Anda memahami dan memperbaiki kesalahan Anda. Untuk melihat kesalahan.log, pilih Tampilkan log kesalahan pada panel properti untuk Jalankan Skrip R yang berisi kesalahan.

Misalnya, kami menjalankan kode R berikut, dengan undefined variable y, dalam modul Jalankan Skrip R.

x <- 1.0
z <- x + y

Kode ini gagal dijalankan, yang menghasilkan kondisi kesalahan. Memilih Tampilkan log kesalahan pada panel properti menghasilkan tampilan berikut ini.

Screenshot that shows an error message pop-up.

Sepertinya kita perlu melihat output.log melihat pesan kesalahan R. Pilih modul Jalankan Skrip R, lalu pilih item Lihat output.log di panel properti di sebelah kanan. Jendela browser baru terbuka, dan pesan kesalahan berikut muncul.

[Critical]     Error: Error 0063: The following error occurred during evaluation of R script:
---------- Start of error message from R ----------
object 'y' not found


object 'y' not found
----------- End of error message from R -----------

Pesan kesalahan ini tidak berisi kejutan dan mengidentifikasi masalah dengan jelas.

Untuk memeriksa nilai objek apa pun di R, Anda dapat mencetak nilai ini ke utput.log file. Aturan untuk memeriksa nilai objek pada dasarnya sama seperti dalam sesi R interaktif. Misalnya, jika Anda memasukkan nama variabel pada baris, nilai objek akan dicetak ke output.log file.

Paket di Azure Machine Learning Studio (klasik)

Azure Machine Learning Studio (klasik) hadir dengan lebih dari 350 paket bahasa R yang telah terpasang sebelumnya. Anda dapat menggunakan kode berikut dalam modul Jalankan Skrip R untuk mengambil daftar paket yang telah diinstal sebelumnya.

data.set <- data.frame(installed.packages())
maml.mapOutputPort("data.set")

Jika Anda tidak memahami baris terakhir kode ini saat ini, baca terus. Di sisa artikel ini, kita akan membahas secara ekstensif menggunakan R di lingkungan Azure Machine Learning Studio (klasik).

Pengantar RStudio

RStudio adalah IDE yang banyak digunakan untuk R. Kami akan menggunakan RStudio untuk mengedit, menguji, dan men-debug beberapa kode R yang digunakan dalam panduan ini. Setelah kode R telah diuji dan siap, Anda dapat memotong dan menempel dari editor RStudio ke dalam modul Azure Machine Learning Studio (klasik) Jalankan Skrip R.

Jika Anda tidak memiliki bahasa pemrograman R yang terinstal di komputer desktop Anda, lakukan sekarang. Unduhan gratis bahasa pemrogram R open-source tersedia di Comprehensive R Archive Network (CRAN). Unduhan tersedia untuk Windows, macOS, dan Linux/UNIX. Pilih cermin di dekatnya, dan ikuti petunjuk unduhan. Selain itu, CRAN berisi banyak analitik yang berguna dan paket manipulasi data.

Jika Anda baru menggunakan RStudio, Anda harus mengunduh dan memasang versi desktop. Anda dapat menemukan unduhan RStudio untuk Windows, macOS, dan Linux / UNIX di RStudio. Ikuti petunjuk yang disediakan untuk memasang RStudio di komputer desktop Anda.

Pengantar tutorial untuk RStudio tersedia di Menggunakan RStudio IDE.

Untuk informasi lebih lanjut tentang menggunakan RStudio, lihat Panduan dokumentasi RStudio.

Mendapatkan data masuk dan keluar dari modul Jalankan Skrip R

Di bagian ini, kita akan membahas bagaimana Anda mendapatkan data ke dalam dan ke luar modul Jalankan Skrip R. Kami juga akan mengulas cara menghandel berbagai jenis data yang dibaca ke dalam dan ke luar modul Jalankan Skrip R.

Kode lengkap untuk bagian ini ada di MachineLearningSamples-Notebooks/studio-samples.

Memuat dan memeriksa data

Memuat himpunan data

Kita akan mulai dengan memuat file csdairydata.csv ke Azure Machine Learning Studio (klasik).

  1. Mulai lingkungan Azure Machine Learning Studio (klasik).
  2. Pilih + BARU di kiri bawah layar, dan pilih Himpunan Data.
  3. Pilih Dari File Lokal, lalu pilih Telusuri untuk memilih file.
  4. Pastikan Anda memilih file CSV Generik dengan header (.csv) sebagai jenis untuk himpunan data.
  5. Pilih tanda centang.
  6. Setelah himpunan data diunggah, Anda akan melihat himpunan data baru saat Anda memilih tab Himpunan Data.

Membuat eksperimen

Sekarang kita memiliki beberapa data di Azure Machine Learning Studio (klasik), kita perlu membuat eksperimen untuk melakukan analisis.

  1. Pilih + BARU di kiri bawah layar, dan pilih Eksperimen>Eksperimen Kosong.
  2. Beri nama eksperimen Anda dengan memilih dan memodifikasi Eksperimen yang dibuat pada judul di bagian atas halaman. Misalnya, ubah ke OS Dairy Analysis.
  3. Di sebelah kiri halaman eksperimen, pilih himpunan Data Tersimpan>Himpunan Data Saya. Anda akan melihat file cadairydata.csv yang Anda unggah sebelumnya.
  4. Seret csdairydata.csv himpunan data ke eksperimen.
  5. Dalam kotak Cari item percobaan di bagian atas panel kiri, masukkan Jalankan Skrip R. Modul muncul di daftar pencarian.
  6. Seret modul Jalankan Skrip R ke palet Anda.
  7. Sambungkan output daricsdairydata.csv himpunan data ke input paling kiri (Himpunan Data1) dari JalankanR Script.
  8. Pilih Simpan.

Pada titik ini, eksperimen Anda harus terlihat seperti contoh ini.

Diagram that shows the CA Dairy Analysis experiment with dataset and Execute R Script module.

Memeriksa data

Mari kita lihat data yang telah kita muat ke dalam eksperimen kita. Dalam eksperimen, pilih output kumpulan data datacadairydata.csv, dan pilih Visualisasikan. Anda akan melihat sesuatu seperti ringkasan ini.

Screenshot that shows a summary of the cadairydata.csv dataset.

Tampilan ini menunjukkan banyak informasi yang berguna. Kita dapat melihat beberapa baris pertama dari himpunan data. Jika kita memilih kolom, bagian Statistik memperlihatkan informasi selengkapnya tentang kolom tersebut. Misalnya, baris Jenis Fitur memperlihatkan jenis data Apa yang ditetapkan Azure Machine Learning Studio (klasik) ke kolom. Periksa tampilan ini sebelum Anda mulai melakukan pekerjaan serius.

Skrip R Pertama

Mari kita buat skrip R pertama yang sederhana untuk bereksperimen dalam Azure Machine Learning Studio (klasik). Kami membuat dan menguji skrip berikut di RStudio.

## Only one of the following two lines should be used
## If running in Machine Learning Studio (classic), use the first line with maml.mapInputPort()
## If in RStudio, use the second line with read.csv()
cadairydata <- maml.mapInputPort(1)
# cadairydata  <- read.csv("cadairydata.csv", header = TRUE, stringsAsFactors = FALSE)
str(cadairydata)
pairs(~ Cotagecheese.Prod + Icecream.Prod + Milk.Prod + N.CA.Fat.Price, data = cadairydata)
## The following line should be executed only when running in
## Machine Learning Studio (classic)
maml.mapOutputPort('cadairydata')

Sekarang kita perlu mentransfer skrip ini ke Azure Machine Learning Studio (klasik). Anda dapat memotong dan menempel, tetapi dalam kasus ini, mentransfer skrip R melalui file zip.

Menginput data ke modul Jalankan Skrip R

Mari kita lihat input ke modul Jalankan Skrip R. Dalam contoh ini, kita akan membaca data susu California ke dalam modul Jalankan Skrip R.

Ada tiga kemungkinan input untuk modul Jalankan Skrip R. Anda dapat menggunakan salah satu atau semua input ini, tergantung pada aplikasi Anda. Anda juga dapat menggunakan skrip R yang tidak mengambil input sama sekali.

Mari kita lihat masing-masing input ini, dari kiri ke kanan. Anda dapat melihat nama masing-masing input dengan menempatkan kursor Anda di atas input dan membaca tipsalat.

Bundel skrip

Input Bundel Skrip memungkinkan Anda untuk meneruskan konten file zip ke modul Jalankan Skrip R. Anda bisa menggunakan salah satu perintah berikut untuk membaca konten file zip ke dalam kode R Anda.

source("src/yourfile.R") # Reads a zipped R script
load("src/yourData.rdata") # Reads a zipped R data file

Catatan

Azure Machine Learning Studio (klasik) memperlakukan file dalam file zip seolah-olah mereka berada di direktori src /, jadi Anda perlu awali nama file Anda dengan nama direktori ini. Misalnya, jika file zip berisi file yourfile.R dan yourData.rdata di akar file zip, Anda membahas file-file ini saat src/yourfile.R dan src/yourData.rdata ketika Anda menggunakan source dan load.

Kami sudah mendiskusikan memuat himpunan data di Muat himpunan data. Setelah Anda membuat dan menguji skrip R yang diperlihatkan di bagian sebelumnya, lakukan langkah-langkah berikut.

  1. Simpan skrip R ke dalam file R. Kami menyebut file skrip simpleplot. R. Berikut adalah apa yang ada dalam file:

    ## Only one of the following two lines should be used
    ## If running in Machine Learning Studio (classic), use the first line with maml.mapInputPort()
    ## If in RStudio, use the second line with read.csv()
    cadairydata <- maml.mapInputPort(1)
    # cadairydata  <- read.csv("cadairydata.csv", header = TRUE, stringsAsFactors = FALSE)
    str(cadairydata)
    pairs(~ Cotagecheese.Prod + Icecream.Prod + Milk.Prod + N.CA.Fat.Price, data = cadairydata)
    ## The following line should be executed only when running in
    ## Machine Learning Studio (classic)
    maml.mapOutputPort('cadairydata')
    
  2. Buat file zip, dan salin skrip Anda ke dalam file zip ini. Di Windows, Anda bisa mengklik kanan file dan memilih Kirim ke>Folder terkompresi. Tindakan ini membuat file zip baru yang berisi file simpleplot.R.

  3. Tambahkan file Anda ke himpunan data di Azure Machine Learning Studio (klasik), dan tentukan jenisnya sebagai zip. Sekarang Anda akan melihat file zip di himpunan data Anda.

  4. Seret file zip dari himpunan data ke kanvas ML Studio (klasik) .

  5. Sambungkan output ikon data zip ke input Bundel Skrip dari modul Jalankan Skrip R.

  6. Masukkan source() fungsi dengan nama file zip Anda ke dalam jendela kode u.ntuk modul Jalankan Skrip R. Dalam hal ini, kami masuk source("src/simpleplot.R").

  7. Pilih Simpan.

Setelah langkah-langkah ini selesai, modul Jalankan Skrip R menjalankan skrip R dalam file zip saat eksperimen dijalankan. Pada titik ini, eksperimen Anda harus terlihat seperti contoh ini.

Diagram that shows an experiment using a zipped R script.

Himpunan data1

Anda dapat meneruskan tabel data persegi panjang ke kode R Anda dengan menggunakan input Himpunan Data1. Dalam skrip sederhana kami, maml.mapInputPort(1) fungsi ini membaca data dari port 1. Data ini kemudian ditetapkan ke nama variabel dataframe di kode Anda. Dalam skrip sederhana kami, baris pertama kode melakukan penugasan.

cadairydata <- maml.mapInputPort(1)

Jalankan eksperimen Anda dengan memilih tombol Jalankan. Ketika eksekusi selesai, pilih modul Jalankan Skrip R, lalu pilih Tampilkan log output pada panel properti. Halaman baru akan muncul di browser Anda yang memperlihatkan konten output.log file. Saat menggulir ke bawah, Anda akan melihat sesuatu seperti output berikut.

[ModuleOutput] InputDataStructure
[ModuleOutput]
[ModuleOutput] {
[ModuleOutput]  "InputName":Dataset1
[ModuleOutput]  "Rows":228
[ModuleOutput]  "Cols":9
[ModuleOutput]  "ColumnTypes":System.Int32,3,System.Double,5,System.String,1
[ModuleOutput] }

Lebih jauh ke bawah halaman adalah informasi yang lebih rinci pada kolom, yang akan terlihat seperti output berikut.

[ModuleOutput] [1] "Loading variable port1..."
[ModuleOutput]
[ModuleOutput] 'data.frame':    228 obs. of  9 variables:
[ModuleOutput]
[ModuleOutput]  $ Column 0         : int  1 2 3 4 5 6 7 8 9 10 ...
[ModuleOutput]
[ModuleOutput]  $ Year.Month       : num  1995 1995 1995 1995 1995 ...
[ModuleOutput]
[ModuleOutput]  $ Month.Number     : int  1 2 3 4 5 6 7 8 9 10 ...
[ModuleOutput]
[ModuleOutput]  $ Year             : int  1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 ...
[ModuleOutput]
[ModuleOutput]  $ Month            : chr  "Jan" "Feb" "Mar" "Apr" ...
[ModuleOutput]
[ModuleOutput]  $ Cotagecheese.Prod: num  4.37 3.69 4.54 4.28 4.47 ...
[ModuleOutput]
[ModuleOutput]  $ Icecream.Prod    : num  51.6 56.1 68.5 65.7 73.7 ...
[ModuleOutput]
[ModuleOutput]  $ Milk.Prod        : num  2.11 1.93 2.16 2.13 2.23 ...
[ModuleOutput]
[ModuleOutput]  $ N.CA.Fat.Price   : num  0.98 0.892 0.892 0.897 0.897 ...

Hasil ini sebagian besar seperti yang diharapkan, dengan 228 pengamatan dan 9 kolom dalam dataframe. Kita dapat melihat nama kolom, jenis data R, dan sampel setiap kolom.

Catatan

Output cetak yang sama ini tersedia dari output Perangkat R dari modul Jalankan Skrip R. Kita akan membahas output modul Jalankan Skrip R di bagian berikutnya.

Himpunan Data2

Perilaku input Himpunan Data2 identik dengan Himpunan Data1. Dengan menggunakan input ini, Anda dapat meneruskan tabel data persegi panjang kedua ke dalam kode R Anda. Fungsi maml.mapInputPort(2), dengan argumen 2, digunakan untuk meneruskan data ini.

Menjalankan output Skrip R

Mengeluarkan dataframe

Anda dapat menghasilkan konten dataframe R sebagai tabel persegi panjang melalui port Hasil Himpunan Data1 dengan menggunakan fungsi maml.mapOutputPort() tersebut. Dalam skrip R sederhana kami, tindakan ini dilakukan oleh baris berikut.

maml.mapOutputPort('cadairydata')

Setelah Anda menjalankan eksperimen, pilih port output Result Himpunan Data1, lalu pilih Visualisasikan. Anda akan melihat sesuatu seperti contoh ini.

Screenshot that shows the visualization of the output of the California dairy data.

Output ini terlihat identik dengan input, persis seperti yang kami harapkan.

Mengeluaran Perangkat R

Output Perangkat dari modul Jalankan Skrip R berisi pesan dan output grafis. Baik pesan output standar maupun pesan kesalahan standar dari R dikirim ke port keluaran Perangkat R.

Untuk melihat output Perangkat R, pilih port, lalu pilih Visualisasikan. Kami melihat output standar dan kesalahan standar dari skrip R di sini.

Screenshot that shows the standard output and standard error from the R Device port.

Menggulir ke bawah, kita melihat output grafis dari skrip R kami.

Screenshot that shows the graphics output from the R Device port.

Pemfilteran dan transformasi data

Di bagian ini, kami akan melakukan beberapa operasi pemfilteran dan transformasi data dasar pada data susu California. Pada akhir bagian ini, kita akan memiliki data dalam format yang cocok untuk membangun model analitik.

Lebih khusus lagi, di bagian ini kita akan melakukan beberapa tugas pembersihan dan transformasi data umum: mengetik transformasi, memfilter pada dataframe, menambahkan kolom komputasi baru, dan transformasi nilai. Latar belakang ini akan membantu Anda menghadapi banyak variasi yang dihadapi dalam masalah dunia nyata.

Kode R lengkap untuk bagian ini tersedia di MachineLearningSamples-Notebooks/studio-samples.

Mentransformasi jenis

Sekarang kita dapat membaca data susu California ke dalam kode R dalam modul Jalankan Skrip R, kita perlu memastikan bahwa data dalam kolom memiliki jenis dan format yang dimaksudkan.

R adalah bahasa pemrogram yang diketik secara dinamis, yang berarti bahwa jenis data dikoerat dari satu ke bahasa lain sesuai yang diperlukan. jenis data atomik dalam R meliputi numerik, logika, dan karakter. Jenis faktor digunakan untuk menyimpan data kategoris secara kompak. Untuk informasi selengkapnya tentang jenis data, lihat referensi dalam Bacaan lebih lanjut.

Saat data tabular dibaca ke dalam R dari sumber eksternal, selalu merupakan ide yang baik untuk memeriksa jenis yang dihasilkan dalam kolom. Anda mungkin menginginkan kolom karakter jenis, tetapi dalam banyak kasus kolom akan muncul sebagai faktor atau sebaliknya. Dalam kasus lain, kolom yang menurut Anda harus numerik diwakili oleh data karakter, misalnya, "1,23" daripada 1,23 sebagai angka titik pecahan.

Untungnya, mudah untuk mengonversi satu jenis ke jenis lain, selama pemetaan dimungkinkan. Misalnya, Anda tidak dapat mengonversi "Nevada" menjadi nilai numerik, tetapi Anda dapat mengonversinya menjadi faktor (variabel kategoris). Sebagai contoh lain, Anda dapat mengonversi numerik 1 menjadi karakter "1" atau faktor.

Sintaks untuk salah satu konversi ini sederhana: as.datatype(). Fungsi konversi jenis ini mencakup fungsi berikut:

  • as.numeric()
  • as.character()
  • as.logical()
  • as.factor()

Melihat jenis data kolom yang kami masukkan di bagian sebelumnya, semua kolom berjenis numerik. Pengecualian adalah kolom berlabel "Bulan," yang berlabel jenis karakter. Mari kita konversi jenis ini menjadi faktor, dan uji hasilnya.

Kami telah menghapus baris yang membuat matriks plot sebar dan menambahkan garis untuk mengonversi kolom Bulan menjadi faktor. Dalam eksperimen ini, kita akan memotong dan menempelkan kode R ke dalam jendela kode modul Jalankan Skrip R. Anda juga dapat memperbarui file zip dan mengunggahnya ke Azure Machine Learning Studio (klasik), tetapi opsi ini mengambil beberapa langkah.

## Only one of the following two lines should be used
## If running in Machine Learning Studio (classic), use the first line with maml.mapInputPort()
## If in RStudio, use the second line with read.csv()
cadairydata <- maml.mapInputPort(1)
# cadairydata  <- read.csv("cadairydata.csv", header = TRUE, stringsAsFactors = FALSE)
## Ensure the coding is consistent and convert column to a factor
cadairydata$Month <- as.factor(cadairydata$Month)
str(cadairydata) # Check the result
## The following line should be executed only when running in
## Machine Learning Studio (classic)
maml.mapOutputPort('cadairydata')

Mari kita jalankan kode ini dan lihat log output untuk skrip R. Data yang relevan dari log ditampilkan di sini.

[ModuleOutput] [1] "Loading variable port1..."
[ModuleOutput] 
[ModuleOutput] 'data.frame':    228 obs. of  9 variables:
[ModuleOutput] 
[ModuleOutput]  $ Column 0         : int  1 2 3 4 5 6 7 8 9 10 ...
[ModuleOutput] 
[ModuleOutput]  $ Year.Month       : num  1995 1995 1995 1995 1995 ...
[ModuleOutput] 
[ModuleOutput]  $ Month.Number     : int  1 2 3 4 5 6 7 8 9 10 ...
[ModuleOutput] 
[ModuleOutput]  $ Year             : int  1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 ...
[ModuleOutput] 
[ModuleOutput]  $ Month            : Factor w/ 14 levels "Apr","April",..: 6 5 9 1 11 8 7 3 14 13 ...
[ModuleOutput] 
[ModuleOutput]  $ Cotagecheese.Prod: num  4.37 3.69 4.54 4.28 4.47 ...
[ModuleOutput] 
[ModuleOutput]  $ Icecream.Prod    : num  51.6 56.1 68.5 65.7 73.7 ...
[ModuleOutput] 
[ModuleOutput]  $ Milk.Prod        : num  2.11 1.93 2.16 2.13 2.23 ...
[ModuleOutput] 
[ModuleOutput]  $ N.CA.Fat.Price   : num  0.98 0.892 0.892 0.897 0.897 ...
[ModuleOutput] 
[ModuleOutput] [1] "Saving variable  cadairydata  ..."
[ModuleOutput] 
[ModuleOutput] [1] "Saving the following item(s):  .maml.oport1"

Jenis untuk Bulan sekarang harus mengatakan Faktor w / 14 tingkat. Jenis ini menjadi masalah karena hanya ada 12 bulan dalam setahun. Anda juga dapat memeriksa untuk melihat bahwa jenis dalam Visualisasikan port Himpunan Data Hasil adalah Kategoris.

Masalahnya adalah bahwa kolom Bulan belum dikodekan secara sistematis. Dalam beberapa kasus, sebulan disebut April, dan di lain itu disingkat Apr. Kita dapat memecahkan masalah ini dengan memangkas untai (karakter) menjadi tiga karakter. Baris kode sekarang terlihat seperti contoh berikut.

## Ensure the coding is consistent and convert column to a factor
cadairydata$Month <- as.factor(substr(cadairydata$Month, 1, 3))

Jalankan ulang eksperimen, dan lihat log output. Hasil yang diharapkan ditunjukkan di sini.

[ModuleOutput] [1] "Loading variable port1..."
[ModuleOutput] 
[ModuleOutput] 'data.frame':    228 obs. of  9 variables:
[ModuleOutput] 
[ModuleOutput]  $ Column 0         : int  1 2 3 4 5 6 7 8 9 10 ...
[ModuleOutput] 
[ModuleOutput]  $ Year.Month       : num  1995 1995 1995 1995 1995 ...
[ModuleOutput] 
[ModuleOutput]  $ Month.Number     : int  1 2 3 4 5 6 7 8 9 10 ...
[ModuleOutput] 
[ModuleOutput]  $ Year             : int  1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 ...
[ModuleOutput] 
[ModuleOutput]  $ Month            : Factor w/ 12 levels "Apr","Aug","Dec",..: 5 4 8 1 9 7 6 2 12 11 ...
[ModuleOutput] 
[ModuleOutput]  $ Cotagecheese.Prod: num  4.37 3.69 4.54 4.28 4.47 ...
[ModuleOutput] 
[ModuleOutput]  $ Icecream.Prod    : num  51.6 56.1 68.5 65.7 73.7 ...
[ModuleOutput] 
[ModuleOutput]  $ Milk.Prod        : num  2.11 1.93 2.16 2.13 2.23 ...
[ModuleOutput] 
[ModuleOutput]  $ N.CA.Fat.Price   : num  0.98 0.892 0.892 0.897 0.897 ...
[ModuleOutput] 
[ModuleOutput] [1] "Saving variable  cadairydata  ..."
[ModuleOutput] 
[ModuleOutput] [1] "Saving the following item(s):  .maml.oport1"

Variabel faktor kami sekarang memiliki 12 level yang diinginkan.

Pemfilteran dataframe dasar

Dataframe R mendukung kemampuan pemfilteran yang kuat. Himpunan Data dapat disetel dengan menggunakan filter logika pada baris atau kolom. Dalam banyak kasus, kriteria filter kompleks akan diperlukan. Untuk contoh ekstensif pemfilteran dataframe, lihat referensi dalam Bacaan lebih lanjut.

Ada bit pemfilteran yang harus kita lakukan pada himpunan data kita. Jika Anda melihat kolom dalam dataframe cadairydata, Anda akan melihat dua kolom yang tidak perlu. Kolom pertama memegang nomor baris, yang tidak terlalu berguna. Kolom kedua, Year.Month, berisi informasi yang berlebihan. Kita dapat dengan mudah mengecualikan kolom ini dengan menggunakan kode R berikut.

Catatan

Mulai sekarang di bagian ini, kami akan menunjukkan kode tambahan yang kami tambahkan dalam modul Jalankan Skrip R. Kami akan menambahkan setiap baris baru sebelumstr() fungsi. Kami menggunakan fungsi ini untuk memverifikasi hasil di Azure Machine Learning Studio (klasik).

Kami menambahkan baris berikut ke kode R dalam modul Jalankan Skrip R.

# Remove two columns we do not need
cadairydata <- cadairydata[, c(-1, -2)]

Jalankan kode ini dalam eksperimen Anda, dan periksa hasilnya dari log output. Hasil ini ditunjukkan di sini.

[ModuleOutput] [1] "Loading variable port1..."
[ModuleOutput] 
[ModuleOutput] 'data.frame':    228 obs. of  7 variables:
[ModuleOutput] 
[ModuleOutput]  $ Month.Number     : int  1 2 3 4 5 6 7 8 9 10 ...
[ModuleOutput] 
[ModuleOutput]  $ Year             : int  1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 ...
[ModuleOutput] 
[ModuleOutput]  $ Month            : Factor w/ 12 levels "Apr","Aug","Dec",..: 5 4 8 1 9 7 6 2 12 11 ...
[ModuleOutput] 
[ModuleOutput]  $ Cotagecheese.Prod: num  4.37 3.69 4.54 4.28 4.47 ...
[ModuleOutput] 
[ModuleOutput]  $ Icecream.Prod    : num  51.6 56.1 68.5 65.7 73.7 ...
[ModuleOutput] 
[ModuleOutput]  $ Milk.Prod        : num  2.11 1.93 2.16 2.13 2.23 ...
[ModuleOutput] 
[ModuleOutput]  $ N.CA.Fat.Price   : num  0.98 0.892 0.892 0.897 0.897 ...
[ModuleOutput] 
[ModuleOutput] [1] "Saving variable  cadairydata  ..."
[ModuleOutput] 
[ModuleOutput] [1] "Saving the following item(s):  .maml.oport1"

Kami sekarang mendapatkan hasil yang diharapkan.

Menambahkan Kolom Baru

Untuk membuat model time series, akan lebih mudah untuk memiliki kolom yang berisi bulan-bulan sejak dimulainya rangkaian waktu. Kami akan membuat kolom baru Month.Count.

Untuk membantu mengatur kode, kami akan membuat fungsi sederhana pertama kami, num.month(). Kami kemudian akan menerapkan fungsi ini untuk membuat kolom baru di dataframe. Kode baru adalah sebagai berikut:

## Create a new column with the month count
## Function to find the number of months from the first
## month of the time series
num.month <- function(Year, Month) {
  ## Find the starting year
  min.year  <- min(Year)

  ## Compute the number of months from the start of the time series
  12 * (Year - min.year) + Month - 1
}

## Compute the new column for the dataframe
cadairydata$Month.Count <- num.month(cadairydata$Year, cadairydata$Month.Number)

Sekarang jalankan eksperimen yang diperbarui, dan gunakan log output untuk melihat hasilnya. Hasil ini ditunjukkan di sini.

[ModuleOutput] [1] "Loading variable port1..."
[ModuleOutput] 
[ModuleOutput] 'data.frame':    228 obs. of  8 variables:
[ModuleOutput] 
[ModuleOutput]  $ Month.Number     : int  1 2 3 4 5 6 7 8 9 10 ...
[ModuleOutput] 
[ModuleOutput]  $ Year             : int  1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 ...
[ModuleOutput] 
[ModuleOutput]  $ Month            : Factor w/ 12 levels "Apr","Aug","Dec",..: 5 4 8 1 9 7 6 2 12 11 ...
[ModuleOutput] 
[ModuleOutput]  $ Cotagecheese.Prod: num  4.37 3.69 4.54 4.28 4.47 ...
[ModuleOutput] 
[ModuleOutput]  $ Icecream.Prod    : num  51.6 56.1 68.5 65.7 73.7 ...
[ModuleOutput] 
[ModuleOutput]  $ Milk.Prod        : num  2.11 1.93 2.16 2.13 2.23 ...
[ModuleOutput] 
[ModuleOutput]  $ N.CA.Fat.Price   : num  0.98 0.892 0.892 0.897 0.897 ...
[ModuleOutput] 
[ModuleOutput]  $ Month.Count      : num  0 1 2 3 4 5 6 7 8 9 ...
[ModuleOutput] 
[ModuleOutput] [1] "Saving variable  cadairydata  ..."
[ModuleOutput] 
[ModuleOutput] [1] "Saving the following item(s):  .maml.oport1"

Sepertinya semuanya bekerja. Kami memiliki kolom baru dengan nilai yang diharapkan dalam dataframe kami.

Mentransformasi nilai

Di bagian ini, kita akan melakukan beberapa transformasi sederhana pada nilai di beberapa kolom dataframe. Bahasa pemrogram R mendukung transformasi nilai yang hampir sewenang-wenang. Untuk contoh selengkapnya, lihat referensi dalam Bacaan lebih lanjut.

Jika Anda melihat nilai dalam ringkasan dataframe, Anda akan melihat sesuatu yang aneh di sini. Apakah lebih banyak es krim daripada susu yang diproduksi di California? Tidak, tentu saja tidak. Masalahnya adalah bahwa satuannya berbeda. Harganya dalam satuan pound AS, susu dalam satuan 1 juta pound AS, es krim dalam satuan 1.000 galon AS, dan keju cottage berada di satuan 1.000 pound AS. Dengan asumsi es krim memiliki berat sekitar 6,5 pon per galon, kita dapat dengan mudah melakukan perkalian untuk mengkonversi nilai-nilai ini sehingga semuanya dalam satuan yang sama 1.000 pound.

Untuk model prakiraan kami, kami menggunakan model multiplikatif untuk penyesuaian tren dan musiman dari data ini. Transformasi log memungkinkan kita untuk menggunakan model linear, yang menyederhanakan proses ini. Kita dapat mengaplikasikan transformasi log dalam fungsi yang sama di mana pengali diterapkan.

Dalam kode berikut, kami mendefinisikan fungsi baru, log.transform() dan mengaplikasikan ke baris yang berisi nilai numerik. Map()Fungsi R digunakan untuk menerapkan log.transform() fungsi ke kolom dataframe yang dipilih. Map() Fungsi ini mirip dengan apply(), tetapi memungkinkan lebih dari satu daftar argumen ke fungsi. Perhatikan bahwa daftar pengali memasok argumen kedua ke log.transform() fungsi. na.omit()Fungsi ini digunakan sebagai bit pembersihan untuk memastikan kami tidak memiliki nilai yang hilang atau tidak terdefinisi dalam kerangka data.

log.transform <- function(invec, multiplier = 1) {
  ## Function for the transformation, which is the log
  ## of the input value times a multiplier

  warningmessages <- c("ERROR: Non-numeric argument encountered in function log.transform",
                       "ERROR: Arguments to function log.transform must be greate than zero",
                       "ERROR: Aggurment multiplier to funcition log.transform must be a scaler",
                       "ERROR: Invalid time seies value encountered in function log.transform"
                       )

  ## Check the input arguments
  if(!is.numeric(invec) | !is.numeric(multiplier)) {warning(warningmessages[1]); return(NA)}  
  if(any(invec < 0.0) | any(multiplier < 0.0)) {warning(warningmessages[2]); return(NA)}
  if(length(multiplier) != 1) {{warning(warningmessages[3]); return(NA)}}

  ## Wrap the multiplication in tryCatch
  ## If there is an exception, print the warning message to
  ## standard error and return NA
  tryCatch(log(multiplier * invec),
           error = function(e){warning(warningmessages[4]); NA})
}


## Apply the transformation function to the 4 columns
## of the dataframe with production data
multipliers  <- list(1.0, 6.5, 1000.0, 1000.0)
cadairydata[, 4:7] <- Map(log.transform, cadairydata[, 4:7], multipliers)

## Get rid of any rows with NA values
cadairydata <- na.omit(cadairydata)  

Ada bit yang terjadi dalam log.transform() fungsi. Sebagian besar kode ini adalah memeriksa potensi masalah dengan argumen atau berurusan dengan pengecualian, yang masih dapat muncul selama perhitungan. Hanya beberapa baris kode ini yang melakukan komputasi.

Tujuan pemrograman defensif adalah untuk mencegah kegagalan fungsi tunggal yang mencegah pemrosesan berlanjut. Kegagalan mendadak dari analisis jangka panjang dapat membuat frustrasi bagi pengguna. Untuk menghindari situasi ini, nilai pengembalian default harus dipilih yang akan membatasi kerusakan pada pemrosesan hilir. Pesan juga diproduksi untuk memperingatkan pengguna bahwa ada sesuatu yang salah.

Jika Anda tidak terbiasa dengan pemrograman defensif di R, semua kode ini mungkin luar biasa. Mari kita berjalan melalui langkah-langkah utama:

  1. Vektor dari empat pesan didefinisikan. Pesan-pesan ini digunakan untuk mengkomunikasikan informasi tentang beberapa kemungkinan kesalahan dan pengecualian yang dapat terjadi dengan kode ini.
  2. Kami mengembalikan nilai NA untuk setiap kasus. Ada banyak kemungkinan lain yang mungkin memiliki lebih sedikit efek samping. Kita bisa mengembalikan vektor nol atau vektor input asli, misalnya.
  3. Pemeriksaan dijalankan pada argumen ke fungsi. Dalam setiap kasus, jika kesalahan terdeteksi, nilai default dikembalikan dan pesan dihasilkan oleh warning() fungsi. Kami menggunakan warning() daripada stop() karena yang terakhir akan mengakhiri eksekusi, yang adalah apa yang kita coba hindari. Kode ini ditulis dengan gaya prosedural, karena dalam kasus ini pendekatan fungsional tampak kompleks dan tidak jelas.
  4. Perhitungan log dibungkus tryCatch() sehingga pengecualian tidak akan menyebabkan penghentian pemrosesan secara tiba-tiba. Tanpa tryCatch(), sebagian besar kesalahan yang diajukan oleh fungsi R menghasilkan sinyal berhenti, yang melakukan hal itu.

Jalankan kode R ini dalam eksperimen Anda dan lihat output yang dicetak dalam output.log file. dihasilkan. Sekarang Anda akan melihat nilai yang ditransformasi dari empat kolom dalam log, seperti yang diperlihatkan di sini.

[ModuleOutput] [1] "Loading variable port1..."
[ModuleOutput] 
[ModuleOutput] 'data.frame':    228 obs. of  8 variables:
[ModuleOutput] 
[ModuleOutput]  $ Month.Number     : int  1 2 3 4 5 6 7 8 9 10 ...
[ModuleOutput] 
[ModuleOutput]  $ Year             : int  1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 ...
[ModuleOutput] 
[ModuleOutput]  $ Month            : Factor w/ 12 levels "Apr","Aug","Dec",..: 5 4 8 1 9 7 6 2 12 11 ...
[ModuleOutput] 
[ModuleOutput]  $ Cotagecheese.Prod: num  1.47 1.31 1.51 1.45 1.5 ...
[ModuleOutput] 
[ModuleOutput]  $ Icecream.Prod    : num  5.82 5.9 6.1 6.06 6.17 ...
[ModuleOutput] 
[ModuleOutput]  $ Milk.Prod        : num  7.66 7.57 7.68 7.66 7.71 ...
[ModuleOutput] 
[ModuleOutput]  $ N.CA.Fat.Price   : num  6.89 6.79 6.79 6.8 6.8 ...
[ModuleOutput] 
[ModuleOutput]  $ Month.Count      : num  0 1 2 3 4 5 6 7 8 9 ...
[ModuleOutput] 
[ModuleOutput] [1] "Saving variable  cadairydata  ..."
[ModuleOutput] 
[ModuleOutput] [1] "Saving the following item(s):  .maml.oport1"

Kami melihat nilai-nilai telah ditransformasikan. Produksi susu sekarang sangat melebihi semua produksi produk susu lainnya, mengingat bahwa kita sekarang melihat skala log.

Pada titik ini, data kami dibersihkan dan kami siap untuk beberapa pemodelan. Jika Anda melihat ringkasan visualisasi untuk output Himpunan Data Hasil modul Jalankan Skrip R kami, Anda akan melihat kolom Bulan dikategorikan dengan 12 nilai unik, yang sama seperti yang kami inginkan.

Objek rangkaian waktu dan analisis korelasi

Di bagian ini, kita akan menjelajahi beberapa objek seri waktu R dasar dan menganalisis korelasi antara beberapa variabel. Tujuan kami adalah untuk menghasilkan dataframe yang berisi informasi korelasi pairwise di beberapa keterkaitan.

Kode R lengkap untuk bagian ini ada di MachineLearningSamples-Notebooks/studio-samples.

Objek rangkaian waktu di R

Seperti yang telah disebutkan, rangkaian waktu adalah serangkaian nilai data yang diindeks menurut waktu. Objek seri waktu R digunakan untuk membuat dan mengelola indeks waktu. Ada beberapa keuntungan menggunakan objek time series. Objek rangkaian waktu membebaskan Anda dari banyak detail pengelolaan nilai indeks rangkaian waktu yang dienkapsulasi dalam objek. Selain itu, objek time series memungkinkan Anda untuk menggunakan banyak metode time series untuk merencanakan, mencetak, memodelkan, dan sebagainya.

Kelas seri waktu POSIXct umumnya digunakan dan relatif sederhana. Kelas seri kali ini mengukur waktu dari awal zaman, 1 Januari 1970. Kita akan menggunakan objek seri waktu POSIXct dalam contoh ini. Kelas objek seri waktu R lain yang banyak digunakan termasuk kebun binatang dan xts (rangkaian waktu yang dapat diperluas).

Contoh objek rangkaian waktu

Mari kita mulai dengan contoh kita. Seret modul Jalankan Skrip R baru ke eksperimen Anda. Sambungkan port output Result Himpunan Data1 dari modul Jalankan Skrip R yang ada ke port input Himpunan Data1 dari modul Jalankan Skrip R baru.

Seperti yang kami lakukan untuk contoh pertama, kami akan maju melalui contoh. Pada titik tertentu, kami hanya akan bertambah bertahap baris tambahan inkremental kode R di setiap langkah.

Membaca dataframe

Sebagai langkah pertama, mari kita baca dalam dataframe dan pastikan kita mendapatkan hasil yang diharapkan. Kode berikut harus melakukan pekerjaan.

# Comment the following if using RStudio
cadairydata <- maml.mapInputPort(1)
str(cadairydata) # Check the results

Sekarang, jalankan eksperimen. Log bentuk Jalankan Skrip R baru akan terlihat seperti contoh ini.

[ModuleOutput] [1] "Loading variable port1..."
[ModuleOutput] 
[ModuleOutput] 'data.frame':    228 obs. of  8 variables:
[ModuleOutput] 
[ModuleOutput]  $ Month.Number     : int  1 2 3 4 5 6 7 8 9 10 ...
[ModuleOutput] 
[ModuleOutput]  $ Year             : int  1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 ...
[ModuleOutput] 
[ModuleOutput]  $ Month            : Factor w/ 12 levels "Apr","Aug","Dec",..: 5 4 8 1 9 7 6 2 12 11 ...
[ModuleOutput] 
[ModuleOutput]  $ Cotagecheese.Prod: num  1.47 1.31 1.51 1.45 1.5 ...
[ModuleOutput] 
[ModuleOutput]  $ Icecream.Prod    : num  5.82 5.9 6.1 6.06 6.17 ...
[ModuleOutput] 
[ModuleOutput]  $ Milk.Prod        : num  7.66 7.57 7.68 7.66 7.71 ...
[ModuleOutput] 
[ModuleOutput]  $ N.CA.Fat.Price   : num  6.89 6.79 6.79 6.8 6.8 ...
[ModuleOutput] 
[ModuleOutput]  $ Month.Count      : num  0 1 2 3 4 5 6 7 8 9 ...

Data ini adalah jenis dan format yang diharapkan. Sekarang kolom Bulan adalah jenis faktor dan memiliki jumlah tingkat yang diharapkan.

Membuat objek rangkaian waktu

Kita perlu menambahkan objek seri waktu ke dataframe kita. Ganti kode saat ini dengan kode berikut, yang menambahkan kolom baru posixct kelas.

# Comment the following if using RStudio
cadairydata <- maml.mapInputPort(1)

## Create a new column as a POSIXct object
Sys.setenv(TZ = "PST8PDT")
cadairydata$Time <- as.POSIXct(strptime(paste(as.character(cadairydata$Year), "-", as.character(cadairydata$Month.Number), "-01 00:00:00", sep = ""), "%Y-%m-%d %H:%M:%S"))

str(cadairydata) # Check the results

Sekarang, periksa catatannya. Ini akan terlihat seperti contoh ini.

[ModuleOutput] [1] "Loading variable port1..."
[ModuleOutput] 
[ModuleOutput] 'data.frame':    228 obs. of  9 variables:
[ModuleOutput] 
[ModuleOutput]  $ Month.Number     : int  1 2 3 4 5 6 7 8 9 10 ...
[ModuleOutput] 
[ModuleOutput]  $ Year             : int  1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 ...
[ModuleOutput] 
[ModuleOutput]  $ Month            : Factor w/ 12 levels "Apr","Aug","Dec",..: 5 4 8 1 9 7 6 2 12 11 ...
[ModuleOutput] 
[ModuleOutput]  $ Cotagecheese.Prod: num  1.47 1.31 1.51 1.45 1.5 ...
[ModuleOutput] 
[ModuleOutput]  $ Icecream.Prod    : num  5.82 5.9 6.1 6.06 6.17 ...
[ModuleOutput] 
[ModuleOutput]  $ Milk.Prod        : num  7.66 7.57 7.68 7.66 7.71 ...
[ModuleOutput] 
[ModuleOutput]  $ N.CA.Fat.Price   : num  6.89 6.79 6.79 6.8 6.8 ...
[ModuleOutput] 
[ModuleOutput]  $ Month.Count      : num  0 1 2 3 4 5 6 7 8 9 ...
[ModuleOutput] 
[ModuleOutput]  $ Time             : POSIXct, format: "1995-01-01" "1995-02-01" ...

Kita dapat melihat dari ringkasan bahwa kolom baru sebenarnya dari posIXct kelas.

Menjelajahi dan mentransformasi data

Mari kita jelajahi beberapa variabel dalam himpunan data ini. Matriks plot sebar adalah cara yang baik untuk menghasilkan tampilan cepat. Kami akan mengganti str() fungsi dalam kode R sebelumnya dengan baris berikut.

pairs(~ Cotagecheese.Prod + Icecream.Prod + Milk.Prod + N.CA.Fat.Price, data = cadairydata, main = "Pairwise Scatterplots of dairy time series")

Jalankan kode ini, dan lihat apa yang terjadi. Plot yang diproduksi di port Perangkat R harus terlihat seperti contoh ini.

Screenshot that shows the scatter plot matrix of selected variables.

Ada beberapa struktur yang tampak aneh dalam hubungan antara variabel-variabel ini. Mungkin struktur ini muncul dari tren dalam data dan dari fakta bahwa kita belum standar variabel.

Analisis korelasi

Untuk melakukan analisis korelasi, kita perlu keduanya mende-tren dan menstandarkan variabel. Kita hanya bisa menggunakan fungsi scale() R, yang kedua pusat dan skala variabel. Fungsi ini mungkin berjalan lebih cepat. Tapi mari kita lihat contoh pemrograman defensif di R.

ts.detrend()Fungsi berikut melakukan bot obrolan operasi ini. Dua baris kode berikut ini menghapus tren data lalu menstandarkan nilai.

ts.detrend <- function(ts, Time, min.length = 3){
  ## Function to de-trend and standardize a time series

  ## Define some messages if they are NULL  
  messages <- c('ERROR: ts.detrend requires arguments ts and Time to have the same length',
                'ERROR: ts.detrend requires argument ts to be of type numeric',
                paste('WARNING: ts.detrend has encountered a time series with length less than', as.character(min.length)),
                'ERROR: ts.detrend has encountered a Time argument not of class POSIXct',
                'ERROR: Detrend regression has failed in ts.detrend',
                'ERROR: Exception occurred in ts.detrend while standardizing time series in function ts.detrend'
  )
  # Create a vector of zeros to return as a default in some cases
  zerovec  <- rep(length(ts), 0.0)

  # The input arguments are not of the same length, return ts and quit
  if(length(Time) != length(ts)) {warning(messages[1]); return(ts)}

  # If the ts is not numeric, just return a zero vector and quit
  if(!is.numeric(ts)) {warning(messages[2]); return(zerovec)}

  # If the ts is too short, just return it and quit
  if((ts.length <- length(ts)) < min.length) {warning(messages[3]); return(ts)}

  ## Check that the Time variable is of class POSIXct
  if(class(cadairydata$Time)[[1]] != "POSIXct") {warning(messages[4]); return(ts)}

  ## De-trend the time series by using a linear model
  ts.frame  <- data.frame(ts = ts, Time = Time)
  tryCatch({ts <- ts - fitted(lm(ts ~ Time, data = ts.frame))},
           error = function(e){warning(messages[5]); zerovec})

  tryCatch( {stdev <- sqrt(sum((ts - mean(ts))^2))/(ts.length - 1)
             ts <- ts/stdev},
            error = function(e){warning(messages[6]); zerovec})

  ts
}  
## Apply the detrend.ts function to the variables of interest
df.detrend <- data.frame(lapply(cadairydata[, 4:7], ts.detrend, cadairydata$Time))

## Plot the results to look at the relationships
pairs(~ Cotagecheese.Prod + Icecream.Prod + Milk.Prod + N.CA.Fat.Price, data = df.detrend, main = "Pairwise Scatterplots of detrended standardized time series")

Ada bit yang terjadi dalam ts.detrend() fungsi. Sebagian besar kode ini adalah memeriksa potensi masalah dengan argumen atau berurusan dengan pengecualian, yang masih dapat muncul selama perhitungan. Hanya beberapa baris kode ini yang benar-benar melakukan komputasi.

Kami telah membahas contoh pemrograman defensif dalam transformasi Nilai. Kedua blok komputasi dibungkus dalam tryCatch(). Untuk beberapa kesalahan, masuk akal untuk mengembalikan vektor input asli. Dalam kasus lain, kita mengembalikan vektor nol.

Perhatikan bahwa regresi linear yang digunakan untuk de-trending adalah regresi seri waktu. Variabel prediktor adalah objek seri waktu.

Setelah ts.detrend() didefinisikan, kami mengaplikasikan ke variabel yang menarik dalam dataframe kami. Kita harus paksa daftar hasil yang dibuat oleh data lapply() dalam dataframe dengan menggunakan as.data.frame(). Karena aspek defensif dari ts.detrend(), kegagalan untuk memproses salah satu variabel tidak akan mencegah pemrosesan yang benar dari yang lain.

Baris akhir dari kode membuat plot sebar pairwise. Setelah menjalankan kode R, hasil plot sebar ditampilkan di sini.

Screenshot that shows the pairwise scatter plot of de-trended and standardized time series.

Anda dapat membandingkan hasil ini dengan hasil yang ditunjukkan dalam contoh sebelumnya. Dengan tren dihapus dan variabel distandarisasi, kita melihat struktur yang jauh lebih sedikit dalam hubungan antara variabel ini.

Kode untuk mengkomputasi korelasi sebagai objek R ccf adalah sebagai berikut.

## A function to compute pairwise correlations from a
## list of time series value vectors
pair.cor <- function(pair.ind, ts.list, lag.max = 1, plot = FALSE){
  ccf(ts.list[[pair.ind[1]]], ts.list[[pair.ind[2]]], lag.max = lag.max, plot = plot)
}

## A list of the pairwise indices
corpairs <- list(c(1,2), c(1,3), c(1,4), c(2,3), c(2,4), c(3,4))

## Compute the list of ccf objects
cadairycorrelations <- lapply(corpairs, pair.cor, df.detrend)  

cadairycorrelations

Menjalankan kode ini menghasilkan log yang ditunjukkan di sini.

[ModuleOutput] Loading objects:
[ModuleOutput]   port1
[ModuleOutput] [1] "Loading variable port1..."
[ModuleOutput] [[1]]
[ModuleOutput] 
[ModuleOutput] 
[ModuleOutput] Autocorrelations of series 'X', by lag
[ModuleOutput] 
[ModuleOutput] 
[ModuleOutput]    -1     0     1 
[ModuleOutput] 0.148 0.358 0.317 
[ModuleOutput] 
[ModuleOutput] 
[ModuleOutput] [[2]]
[ModuleOutput] 
[ModuleOutput] 
[ModuleOutput] Autocorrelations of series 'X', by lag
[ModuleOutput] 
[ModuleOutput] 
[ModuleOutput]     -1      0      1 
[ModuleOutput] -0.395 -0.186 -0.238 
[ModuleOutput] 
[ModuleOutput] 
[ModuleOutput] [[3]]
[ModuleOutput] 
[ModuleOutput] 
[ModuleOutput] Autocorrelations of series 'X', by lag
[ModuleOutput] 
[ModuleOutput] 
[ModuleOutput]     -1      0      1 
[ModuleOutput] -0.059 -0.089 -0.127 
[ModuleOutput] 
[ModuleOutput] 
[ModuleOutput] [[4]]
[ModuleOutput] 
[ModuleOutput] 
[ModuleOutput] Autocorrelations of series 'X', by lag
[ModuleOutput] 
[ModuleOutput] 
[ModuleOutput]    -1     0     1 
[ModuleOutput] 0.140 0.294 0.293 
[ModuleOutput] 
[ModuleOutput] 
[ModuleOutput] [[5]]
[ModuleOutput] 
[ModuleOutput] 
[ModuleOutput] Autocorrelations of series 'X', by lag
[ModuleOutput] 
[ModuleOutput] 
[ModuleOutput]     -1      0      1 
[ModuleOutput] -0.002 -0.074 -0.124 

Ada nilai korelasi untuk setiap jeda. Tidak satu pun dari nilai korelasi ini cukup besar untuk menjadi signifikan. Kita dapat menyimpulkan bahwa kita dapat memodelkan setiap variabel secara independen.

Mengeluarkan dataframe

Kami telah mengkomputasi korelasi pairwise sebagai daftar objek R ccf. Hal ini menyajikan bit masalah karena port output Result Himpunan Data benar-benar membutuhkan dataframe. Selanjutnya, objek ccf itu sendiri adalah daftar, dan kami hanya ingin nilai-nilai dalam elemen pertama dari daftar ini, korelasi di berbagai kerah.

Kode berikut mengekstrak nilai jeda dari daftar objek ccf, yang merupakan daftar mereka sendiri.

df.correlations <- data.frame(do.call(rbind, lapply(cadairycorrelations, '[[', 1)))

c.names <- c("correlation pair", "-1 lag", "0 lag", "+1 lag")
r.names  <- c("Corr Cot Cheese - Ice Cream",
              "Corr Cot Cheese - Milk Prod",
              "Corr Cot Cheese - Fat Price",
              "Corr Ice Cream - Mik Prod",
              "Corr Ice Cream - Fat Price",
              "Corr Milk Prod - Fat Price")

## Build a dataframe with the row names column and the
## correlation dataframe and assign the column names
outframe <- cbind(r.names, df.correlations)
colnames(outframe) <- c.names
outframe


## WARNING!
## The following line works only in Machine Learning Studio (classic)
## When running in RStudio, this code will result in an error
#maml.mapOutputPort('outframe')

Baris pertama kode bit rumit, dan beberapa penjelasan mungkin membantu Anda memahaminya. Bekerja dari dalam ke luar, kami memiliki:

  1. [[ Operator dengan argumen 1 memilih vektor korelasi pada keak-keping dari elemen pertama daftar objek ccf.
  2. do.call()Fungsi ini menerapkan rbind() fungsi di atas elemen daftar yang dikembalikan oleh lapply().
  3. data.frame()Fungsi ini mengkoerce hasil yang dihasilkan do.call() oleh dataframe.

Perhatikan bahwa nama baris berada dalam kolom dataframe. Melakukannya mempertahankan nama baris saat output dari Jalankan Skrip R.

Menjalankan kode menghasilkan output yang ditunjukkan di sini ketika kita memilih Visualisasikan untuk melihat output di port Result Himpunan Data. Nama baris berada di kolom pertama, seperti yang dimaksudkan.

Screenshot that shows the results output from the correlation analysis.

Contoh rangkaian waktu: Prakiraan usiman

Data kami sekarang dalam bentuk formulir yang cocok untuk analisis, dan kami telah menentukan tidak ada korelasi yang signifikan antara variabel. Mari kita lanjutkan dan buat model prakiraan seri waktu. Dengan menggunakan model ini, kami akan memperkirakan produksi susu California selama 12 bulan 2013.

Model prakiraan kami akan memiliki dua komponen, komponen tren dan komponen musiman. Prakiraan lengkapnya adalah produk dari dua komponen ini. Jenis model ini dikenal sebagai model multiplikatif. Alternatifnya adalah model aditif. Kami telah mengaplikasikan transformasi log ke variabel yang menarik, yang membuat analisis ini dapat di traksi.

Kode R lengkap untuk bagian ini ada di MachineLearningSamples-Notebooks/studio-samples.

Membuat dataframe untuk analisis

Mulailah dengan menambahkan modul Jalankan Skrip R baru ke eksperimen Anda. Menyambungkan output Himpunan Data Hasil dari modul Jalankan Skrip R yang ada ke input Himpunan Data1 dari modul baru. Hasilnya harus terlihat seperti contoh ini.

Diagram that shows the experiment with the new Execute R Script module added.

Seperti analisis korelasi yang baru saja kami selesaikan, kita perlu menambahkan kolom dengan objek seri waktu POSIXct. Kode berikut akan menambahkan kolom.

# If running in Machine Learning Studio (classic), uncomment the first line with maml.mapInputPort()
cadairydata <- maml.mapInputPort(1)

## Create a new column as a POSIXct object
Sys.setenv(TZ = "PST8PDT")
cadairydata$Time <- as.POSIXct(strptime(paste(as.character(cadairydata$Year), "-", as.character(cadairydata$Month.Number), "-01 00:00:00", sep = ""), "%Y-%m-%d %H:%M:%S"))

str(cadairydata)

Jalankan kode ini, dan lihat lognya. Kuncinya akan terlihat seperti contoh ini.

[ModuleOutput] [1] "Loading variable port1..."
[ModuleOutput] 
[ModuleOutput] 'data.frame':    228 obs. of  9 variables:
[ModuleOutput] 
[ModuleOutput]  $ Month.Number     : int  1 2 3 4 5 6 7 8 9 10 ...
[ModuleOutput] 
[ModuleOutput]  $ Year             : int  1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 ...
[ModuleOutput] 
[ModuleOutput]  $ Month            : Factor w/ 12 levels "Apr","Aug","Dec",..: 5 4 8 1 9 7 6 2 12 11 ...
[ModuleOutput] 
[ModuleOutput]  $ Cotagecheese.Prod: num  1.47 1.31 1.51 1.45 1.5 ...
[ModuleOutput] 
[ModuleOutput]  $ Icecream.Prod    : num  5.82 5.9 6.1 6.06 6.17 ...
[ModuleOutput] 
[ModuleOutput]  $ Milk.Prod        : num  7.66 7.57 7.68 7.66 7.71 ...
[ModuleOutput] 
[ModuleOutput]  $ N.CA.Fat.Price   : num  6.89 6.79 6.79 6.8 6.8 ...
[ModuleOutput] 
[ModuleOutput]  $ Month.Count      : num  0 1 2 3 4 5 6 7 8 9 ...
[ModuleOutput] 
[ModuleOutput]  $ Time             : POSIXct, format: "1995-01-01" "1995-02-01" ...

Dengan hasil ini, kami siap untuk memulai analisis kami.

Membuat himpunan data pelatihan

Dengan dataframe yang dibangun, kita perlu membuat himpunan data pelatihan. Data ini akan mencakup semua pengamatan kecuali 12 terakhir, tahun 2013, yang merupakan himpunan data pengujian kami. Kode berikut ini mensubset dataframe dan membuat plot produksi susu dan variabel harga. Kami kemudian membuat plot dari empat variabel produksi dan harga. Fungsi anonim digunakan untuk menentukan beberapa augment untuk plot, dan kemudian iterasi atas daftar dua argumen lainnya dengan Map(). Jika Anda berpikir bahwa untuk perulangan akan bekerja dengan baik di sini, Anda benar. Tapi, karena R adalah bahasa pemrogram fungsional, kami melihat pendekatan fungsional.

cadairytrain <- cadairydata[1:216, ]

Ylabs  <- list("Log CA Cotage Cheese Production, 1000s lb",
               "Log CA Ice Cream Production, 1000s lb",
               "Log CA Milk Production 1000s lb",
               "Log North CA Milk Milk Fat Price per 1000 lb")

Map(function(y, Ylabs){plot(cadairytrain$Time, y, xlab = "Time", ylab = Ylabs, type = "l")}, cadairytrain[, 4:7], Ylabs)

Menjalankan kode menghasilkan serangkaian plot seri waktu dari output Perangkat R yang ditunjukkan di sini. Sumbu waktu dalam satuan tanggal, yang merupakan keuntungan yang bagus dari metode plot seri waktu.

First time series plot of California dairy production and price data.

Second time series plot of California dairy production and price data.

Third time series plot of California dairy production and price data..

Fourth time series plot of California dairy production and price data

Model tren

Sekarang kami telah membuat objek seri waktu dan melihat data, mari kita mulai membangun model tren untuk data produksi susu California. Kita dapat menggunakan regresi seri waktu. Jelas dari plot bahwa kita akan membutuhkan lebih dari kemiringan dan penyadapan untuk secara akurat model tren yang diamati dalam data pelatihan.

Mengingat skala kecil data, kami akan membangun model untuk tren di RStudio dan kemudian memotong dan menempelkan model yang dihasilkan ke Dalam Azure Machine Learning Studio (klasik). RStudio menyediakan lingkungan interaktif untuk jenis analisis interaktif ini.

Sebagai upaya pertama, kita akan mencoba regresi polinomial dengan kekuatan hingga tiga. Ada bahaya nyata dari over-fitting model semacam ini. Yang terbaik adalah menghindari ketentuan pesanan tinggi. I()Fungsi ini menghambat interpretasi konten (menafsirkan isi konten apa adanya) dan memungkinkan Anda untuk menulis fungsi yang ditafsirkan secara harfiah dalam persamaan regresi.

milk.lm <- lm(Milk.Prod ~ Time + I(Month.Count^2) + I(Month.Count^3), data = cadairytrain)
summary(milk.lm)

Fungsi ini menghasilkan output berikut.

##
## Call:
## lm(formula = Milk.Prod ~ Time + I(Month.Count^2) + I(Month.Count^3),
##     data = cadairytrain)
##
## Residuals:
##      Min       1Q   Median       3Q      Max
## -0.12667 -0.02730  0.00236  0.02943  0.10586
##
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)
## (Intercept)       6.33e+00   1.45e-01   43.60   <2e-16 ***
## Time              1.63e-09   1.72e-10    9.47   <2e-16 ***
## I(Month.Count^2) -1.71e-06   4.89e-06   -0.35    0.726
## I(Month.Count^3) -3.24e-08   1.49e-08   -2.17    0.031 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.0418 on 212 degrees of freedom
## Multiple R-squared:  0.941,    Adjusted R-squared:  0.94
## F-statistic: 1.12e+03 on 3 and 212 DF,  p-value: <2e-16

Dari nilai P (Pr(>|t|)) dalam output ini, kita dapat melihat bahwa istilah kuadrat mungkin tidak signifikan. Kami akan menggunakan update() fungsi untuk memodifikasi model ini dengan menghilangkan istilah kuadrat.

milk.lm <- update(milk.lm, . ~ . - I(Month.Count^2))
summary(milk.lm)

Fungsi ini menghasilkan output berikut.

##
## Call:
## lm(formula = Milk.Prod ~ Time + I(Month.Count^3), data = cadairytrain)
##
## Residuals:
##      Min       1Q   Median       3Q      Max
## -0.12597 -0.02659  0.00185  0.02963  0.10696
##
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)
## (Intercept)       6.38e+00   4.07e-02   156.6   <2e-16 ***
## Time              1.57e-09   4.32e-11    36.3   <2e-16 ***
## I(Month.Count^3) -3.76e-08   2.50e-09   -15.1   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.0417 on 213 degrees of freedom
## Multiple R-squared:  0.941,  Adjusted R-squared:  0.94
## F-statistic: 1.69e+03 on 2 and 213 DF,  p-value: <2e-16

Output ini terlihat lebih baik. Semua istilahnya signifikan. Nilai 2e-16 adalah nilai default dan tidak boleh dianggap terlalu serius.

Sebagai tes kewarasan, mari kita membuat plot seri waktu dari data produksi susu California dengan kurva tren yang ditunjukkan. Kami telah menambahkan kode berikut dalam model Azure Machine Learning Studio (klasik) Jalankan Skrip R (bukan RStudio) untuk membuat model dan membuat plot. Hasilnya diperlihatkan dalam contoh berikut.

milk.lm <- lm(Milk.Prod ~ Time + I(Month.Count^3), data = cadairytrain)

plot(cadairytrain$Time, cadairytrain$Milk.Prod, xlab = "Time", ylab = "Log CA Milk Production 1000s lb", type = "l")
lines(cadairytrain$Time, predict(milk.lm, cadairytrain), lty = 2, col = 2)

California milk production data with trend model shown.

Sepertinya model tren cocok dengan data yang cukup baik. Lebih lanjut, tampaknya tidak ada bukti over-fitting, seperti goyangan aneh dalam kurva model.

Model musiman

Dengan model tren di tangan, kita perlu mendorong dan memasukkan efek musiman. Kami akan menggunakan bulan dalam setahun sebagai variabel dummy dalam model linear untuk mengambil efek bulan demi bulan. Ketika Anda memperkenalkan variabel faktor ke dalam model, penyadapan tidak boleh dikomputasi. Jika Anda tidak melakukan ini, rumus ditentukan secara berlebihan, dan R akan dihilangkan salah satu faktor yang diinginkan tetapi mempertahankan istilah penyadapan.

Karena kita memiliki model tren yang memuaskan, kita dapat menggunakan update() fungsi untuk menambahkan istilah baru ke model yang ada. -1 dalam rumus pembaruan menghilangkan rumus intersep. Berlanjut di RStudio untuk saat ini:

milk.lm2 <- update(milk.lm, . ~ . + Month - 1)
summary(milk.lm2)

Fungsi ini menghasilkan output berikut.

##
## Call:
## lm(formula = Milk.Prod ~ Time + I(Month.Count^3) + Month - 1,
##     data = cadairytrain)
##
## Residuals:
##      Min       1Q   Median       3Q      Max
## -0.06879 -0.01693  0.00346  0.01543  0.08726
##
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)
## Time              1.57e-09   2.72e-11    57.7   <2e-16 ***
## I(Month.Count^3) -3.74e-08   1.57e-09   -23.8   <2e-16 ***
## MonthApr          6.40e+00   2.63e-02   243.3   <2e-16 ***
## MonthAug          6.38e+00   2.63e-02   242.2   <2e-16 ***
## MonthDec          6.38e+00   2.64e-02   241.9   <2e-16 ***
## MonthFeb          6.31e+00   2.63e-02   240.1   <2e-16 ***
## MonthJan          6.39e+00   2.63e-02   243.1   <2e-16 ***
## MonthJul          6.39e+00   2.63e-02   242.6   <2e-16 ***
## MonthJun          6.38e+00   2.63e-02   242.4   <2e-16 ***
## MonthMar          6.42e+00   2.63e-02   244.2   <2e-16 ***
## MonthMay          6.43e+00   2.63e-02   244.3   <2e-16 ***
## MonthNov          6.34e+00   2.63e-02   240.6   <2e-16 ***
## MonthOct          6.37e+00   2.63e-02   241.8   <2e-16 ***
## MonthSep          6.34e+00   2.63e-02   240.6   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.0263 on 202 degrees of freedom
## Multiple R-squared:     1,    Adjusted R-squared:     1
## F-statistic: 1.42e+06 on 14 and 202 DF,  p-value: <2e-16

Kami melihat bahwa model tidak lagi memiliki istilah penyadapan dan memiliki 12 faktor bulan yang signifikan. Hasil ini persis seperti yang ingin kami lihat.

Mari kita membuat plot seri waktu lain dari data produksi susu California untuk melihat seberapa baik model musiman bekerja. Kami telah menambahkan kode berikut di Azure Machine Learning Studio (klasik) Jalankan Skrip R untuk membuat model dan membuat plot.

milk.lm2 <- lm(Milk.Prod ~ Time + I(Month.Count^3) + Month - 1, data = cadairytrain)

plot(cadairytrain$Time, cadairytrain$Milk.Prod, xlab = "Time", ylab = "Log CA Milk Production 1000s lb", type = "l")
lines(cadairytrain$Time, predict(milk.lm2, cadairytrain), lty = 2, col = 2)

Menjalankan kode ini di Azure Machine Learning Studio (klasik) menghasilkan plot yang ditunjukkan di sini.

California milk production with model including seasonal effects.

Kecocokan dengan data yang ditampilkan dalam contoh ini agak menggembirakan. Kedua tren dan efek musiman (variasi bulanan) terlihat masuk akal.

Sebagai cek lain pada model kami, mari kita lihat residu. Kode berikut mengkomputasi nilai yang diprediksi dari dua model kami, mengkomputasi residu untuk model musiman, dan kemudian memplot residu ini untuk data pelatihan.

## Compute predictions from our models
predict1  <- predict(milk.lm, cadairydata)
predict2  <- predict(milk.lm2, cadairydata)

## Compute and plot the residuals
residuals <- cadairydata$Milk.Prod - predict2
plot(cadairytrain$Time, residuals[1:216], xlab = "Time", ylab ="Residuals of Seasonal Model")

Plot residual ditunjukkan di sini.

Residuals of the seasonal model for the training data.

Residu ini terlihat masuk akal. Tidak ada struktur tertentu, kecuali efek resesi 2008-2009, yang model kami tidak memperhitungkan dengan sangat baik.

Plot yang ditunjukkan dalam contoh ini berguna untuk mendeteksi pola tergantung waktu dalam residu. Pendekatan eksplisit komputasi dan plotting residu yang kami gunakan menempatkan residu dalam urutan waktu pada plot. Jika kita telah diplot milk.lm$residuals, plot tidak akan dalam urutan waktu.

Anda juga dapat menggunakan plot.lm() untuk menghasilkan serangkaian plot diagnostik.

## Show the diagnostic plots for the model
plot(milk.lm2, ask = FALSE)

Kode ini menghasilkan serangkaian plot diagnostik yang ditunjukkan dalam contoh berikut.

First diagnostic plot for the seasonal model.

Second diagnostic plot for the seasonal model.

Third diagnostic plot for the seasonal model.

Fourth diagnostic plot for the seasonal model.

Ada beberapa titik yang sangat berpengaruh yang diidentifikasi dalam plot ini, tetapi tidak ada yang menyebabkan kekhawatiran besar. Selanjutnya, kita dapat melihat dari plot Q-Q Normal bahwa residu mendekati distribusi normal, yang merupakan asumsi penting untuk model linier.

Prakiraan dan evaluasi model

Hanya ada satu hal lagi yang harus dilakukan untuk menyelesaikan contoh kami. Kita perlu mengkomputasi prakiraan dan mengukur kesalahan terhadap data aktual. Prakiraan kami adalah untuk 12 bulan 2013. Kami dapat mengkomputasi pengukuran kesalahan untuk prakiraan ini ke data aktual yang bukan bagian dari himpunan data pelatihan kami. Selain itu, kami dapat membandingkan performa pada data pelatihan 18 tahun dengan data pengujian 12 bulan.

Sejumlah metrik digunakan untuk mengukur performa model time series. Dalam kasus kami, kami akan menggunakan kesalahan root mean square (RMS). Fungsi berikut mengkomputasi kesalahan RMS di antara dua seri.

RMS.error <- function(series1, series2, is.log = TRUE, min.length = 2){
  ## Function to compute the RMS error or difference between two
  ## series or vectors

  messages <- c("ERROR: Input arguments to function RMS.error of wrong type encountered",
                "ERROR: Input vector to function RMS.error is too short",
                "ERROR: Input vectors to function RMS.error must be of same length",
                "WARNING: Funtion rms.error has received invald input time series.")

  ## Check the arguments
  if(!is.numeric(series1) | !is.numeric(series2) | !is.logical(is.log) | !is.numeric(min.length)) {
    warning(messages[1])
    return(NA)}

  if(length(series1) < min.length) {
    warning(messages[2])
    return(NA)}

  if((length(series1) != length(series2))) {
       warning(messages[3])
    return(NA)}

  ## If is.log is TRUE exponentiate the values, else just copy
  if(is.log) {
    tryCatch( {
      temp1 <- exp(series1)
      temp2 <- exp(series2) },
      error = function(e){warning(messages[4]); NA}
    )
  } else {
    temp1 <- series1
    temp2 <- series2
  }

 ## Compute predictions from our models
predict1  <- predict(milk.lm, cadairydata)
predict2  <- predict(milk.lm2, cadairydata)

## Compute the RMS error in a dataframe
  tryCatch( {
    sqrt(sum((temp1 - temp2)^2) / length(temp1))},
    error = function(e){warning(messages[4]); NA})
}

Seperti log.transform() fungsi yang kami bahas di bagian "Transformasi nilai", ada cukup banyak pemeriksaan kesalahan dan kode pemulihan pengecualian dalam fungsi ini. Prinsip yang dipekerjakan adalah sama. Pekerjaan dilakukan di dua tempat yang dibungkus tryCatch(). Pertama, rangkaian waktu dieksponsensiasi, karena kami telah bekerja dengan log nilai. Kedua, kesalahan RMS yang sebenarnya dikomputasi.

Dilengkapi dengan fungsi untuk mengukur kesalahan RMS, mari kita bangun dan keluarkan dataframe yang berisi kesalahan RMS. Kami akan menyertakan istilah untuk model tren saja dan model lengkap dengan faktor musiman. Mengikuti kode berikut melakukan pekerjaan dengan menggunakan dua model linier yang telah kami bangun.

## Compute the RMS error in a dataframe
## Include the row names in the first column so they will
## appear in the output of the Execute R Script
RMS.df  <-  data.frame(
rowNames = c("Trend Model", "Seasonal Model"),
  Traing = c(
  RMS.error(predict1[1:216], cadairydata$Milk.Prod[1:216]),
  RMS.error(predict2[1:216], cadairydata$Milk.Prod[1:216])),
  Forecast = c(
    RMS.error(predict1[217:228], cadairydata$Milk.Prod[217:228]),
    RMS.error(predict2[217:228], cadairydata$Milk.Prod[217:228]))
)
RMS.df

## The following line should be executed only when running in
## Machine Learning Studio (classic)
maml.mapOutputPort('RMS.df')

Menjalankan kode ini menghasilkan output yang ditunjukkan di sini pada port output Result Himpunan Data.

Screenshot that shows the comparison of RMS errors for the models.

Dari hasil ini, kami melihat bahwa menambahkan faktor musiman ke model mengurangi kesalahan RMS secara signifikan. Tidak terlalu mengejutkan, kesalahan RMS untuk data pelatihan bit kurang dari prakiraan.

Panduan untuk dokumentasi RStudio

RStudio terdokumentasi dengan baik. Berikut adalah beberapa tautan ke bagian kunci dari dokumentasi RStudio untuk membantu Anda memulai.

  • Membuat proyek: Anda dapat mengatur dan mengelola kode R Anda ke dalam proyek dengan menggunakan RStudio. Untuk informasi selengkapnya, lihat Menggunakan Projek. Ikuti petunjuk ini dan buat proyek untuk contoh kode R di artikel ini.
  • Edit dan eksekusi kode R: RStudio menyediakan lingkungan terintegrasi untuk mengedit dan mengeksekusi kode R. Untuk informasi selengkapnya, lihat Mengedit dan Mengeksekusi Kode.
  • Debug: RStudio menyertakan kemampuan proses debug yang kuat. Untuk informasi selengkapnya tentang fitur-fitur ini, lihat proses Debug dengan RStudio. Untuk informasi tentang fitur pemecahan masalah titik henti, lihat Pemecahan Masalah Titik Henti.

Bacaan lebih lanjut

Tutorial pemrograman R ini mencakup dasar-dasar apa yang Anda butuhkan untuk menggunakan bahasa komputer R dengan Azure Machine Learning Studio (klasik). Jika Anda tidak terbiasa dengan R, dua perkenalan tersedia di CRAN:

  • R untuk Pemula oleh Emmanuel Paradis adalah tempat yang baik untuk memulai.
  • Pengantar R oleh W. N. Venables dkk. masuk lebih dalam.

Ada banyak buku tentang R yang dapat membantu Anda memulai:

  • Art of R Programming: A Tour of Statistical Software Design by Norman Matloff adalah pengantar yang sangat baik untuk pemrograman di R.
  • R Cookbook by Paul Teetor menyediakan pendekatan masalah dan solusi untuk mengaplikasikan R.
  • R in Action by Robert Kabacoff adalah buku pengantar berguna lainnya. Situs web Quick R pendamping adalah sumber daya yang berguna.
  • R Inferno by Patrick Burns adalah buku lucu yang mengejutkan yang berkaitan dengan sejumlah topik rumit dan sulit yang dapat ditemui ketika Anda memprogram di R. Buku ini tersedia secara gratis di The R Inferno.
  • Advanced R dari Hadley Wickham menyediakan penyelaman mendalam ke dalam topik-topik lanjutan di R. Versi online dari buku ini yang tersedia secara gratis di Advanced R.
  • Introductory Time Series with R by Paul Cowpertwait dan Andrew Metcalfe memberikan pengantar menggunakan R untuk analisis time series. Banyak lagi teks teoritis memberikan contoh R.

Berikut adalah beberapa sumber daya internet yang hebat: