Sobatcoding.com - Tutorial Single Exponential Smoothing dengan PHP Codeigniter.
Peramalan adalah suatu metode untuk memperkirakan suatu nilai dimasa depan dengan menggunakan data masa lalu. Peramalan juga dapat diartikan sebagai seni dan ilmu untuk memperkirakan kejadian pada masa yang akan datang, sedangkan aktivitas peramalan adalah
aktivitas suatu fungsi bisnis yang berusaha memperkirakan penjualan atau penggunaan suatu produk sehingga produk-produk itu dapat dibuat dalam kuantitas yang tepat (Wardah & Iskandar, 2016).
Metode Exponential Smoothing adalah metode yang menunjukkan pembobotan menurun secara eksponensial terhadap nilai pengamatan yang lebih lama. Terdapat satu atau lebih parameter penulisan yang ditentukan secara eksplisit dan hasil pilihan ini menentukan bobot yang dikenakan pada nilai observasi (Makridakis, Spyros & Wheelwright., 1999).
Metode peramalan exponential smoothing adalah suatu prosedur yang mengulang perhitungan secara terus menerus dengan menggunakan data terbaru. Metode ini terdiri atas tunggal, ganda (double), dan triple. Metode single Exponential smoothing juga dikenal sebagai simple exponential smoothing yang digunakan pada peramalan jangka pendek, biasanya 1 bulan kedepan. Model mengasumsikan bahwa data berfluktuasi di sekitar nilai mean yang tetap atau menunjukkan pola horizontal, tanpa trend dan musiman atau pola pertumbuhan konsisten (Makridakis, Spyros & Wheelwright., 1999).
Tutorial kali ini kita akan mencoba membuat aplikasi peramalan metode single exponential smoothing menggunakan framework PHP Codeigniter.
Kita buat terlebih dahulu sebuah library bernama Exsmooth, dengan cara buat sebuah file bernama Exsmooth.php dan simpan di folder libraries.
Masukkan kode seperti berikut :
<?php
class Exsmooth {
protected $constant = [];
public function __construct()
{
$this->set_constant();
}
public function hitung($data)
{
$Fb = 0;
$Yb = 0;
$res = [];
$totalData= count($data);
foreach($this->constant as $index => $a)
{
foreach($data as $k=>$v)
{
$periode = $this->ThBulanIndo($v['year']. '-'. $v['month']);
#Rumus Single Exsponential Smoothing
#????????+1 = ????X???? + (1 − ????)????b
if( $k == 0 )
{
$F = $v['value'];
}else{
$F = ( $a * $Yb ) + ( ( 1 - $a) * $Fb );
}
$error = $v['value'] - $F;
$mse = pow($error, 2);
$pe = abs($error / $v['value']);
$mae = abs($error);
$res[$a][$k] = [
'n' => $k+1,
'periode' => $periode,
'xt' => $v['value'],
'ft' => $F,
'error' => $error,
'mse' => $mse,
'pe' => $pe,
'mae' => $mae
];
$total['error'][$a] = isset($total['error'][$a]) ? $total['error'][$a] + $error : $error;
$total['mse'][$a] = isset($total['mse'][$a]) ? $total['mse'][$a] + $mse : $mse;
$total['pe'][$a] = isset($total['pe'][$a]) ? $total['pe'][$a] + $pe : $pe;
$total['mae'][$a] = isset($total['mae'][$a]) ? $total['mae'][$a] + $mae : $mae;
#menambahkan 1 data ke depan
if( $k == ( $totalData - 1 ) )
{
#Hitung 1 data ke depan
$last = $k + 1;
$periode = $this->ThBulanIndo(date('Y-m', strtotime("+1 MONTHS", strtotime($v['year'] .'-'. $v['month']))));
$Yb = $v['value'];
$Fb = $F;
$F = ( $a * $Yb ) + ( ( 1 - $a) * $Fb );
$res[$a][$last] = ['n' => $k+2, 'periode' => $periode, 'xt' => 0, 'ft' => $F, 'error' => 0, 'mse' => 0, 'pe' => 0];
}
$Yb = $v['value'];
if( $k == 0 )
{
$Fb = $v['value'];
}else{
$Fb = $F;
}
}
}
#Hitung RMSE & MAPE
foreach($this->constant as $index => $c )
{
$total['rmse'][$c] = sqrt( ($total['mse'][$c]/$totalData) );
$total['mape'][$c] = $total['pe'][$c] / $totalData * 100;
$total['mae'][$c] = $total['mae'][$c]/$totalData;
$total['mse'][$c] = $total['mse'][$c]/$totalData;
$total['mae'][$c] = $total['mae'][$c]/$totalData;
}
$results = [
'data' => $res,
'total' => $total
];
return $results;
}
public function set_constant()
{
$this->constant = ["0.1","0.2","0.3","0.4","0.5","0.6","0.7","0.8","0.9"];
}
public function get_constant()
{
return $this->constant;
}
public function ThBulanIndo($date, $format = 'Y-m-d')
{
$f = date('Y-m-d', strtotime($date));
$ex = explode("-", $f);
$Y = $ex[0];
$m = $ex[1];
$d = $ex[2];
switch( $m )
{
case '01':
$bulan = 'Januari';
break;
case '02':
$bulan = 'Februari';
break;
case '03':
$bulan = 'Maret';
break;
case '04':
$bulan = 'April';
break;
case '05':
$bulan = 'Mei';
break;
case '06':
$bulan = 'Juni';
break;
case '07':
$bulan = 'Juli';
break;
case '08':
$bulan = 'Agustus';
break;
case '09':
$bulan = 'September';
break;
case '10':
$bulan = 'Oktober';
break;
case '11':
$bulan = 'November';
break;
case '12':
$bulan = 'Desember';
break;
}
return $Y . ' '. $bulan;
}
}
Buatlah sebuah controller bernama Exs.php dan masukkan kode seperti berikut :
<?php
class Exs extends CI_Controller {
public function index()
{
$this->load->library("Exsmooth");
$data = [
[
'year' => 2021,
'month'=> 01,
'value'=> 0.58
],
[
'year' => 2021,
'month'=> 02,
'value'=> 0.78
],
[
'year' => 2021,
'month'=> 03,
'value'=> 0.88
],
[
'year' => 2021,
'month'=> 04,
'value'=> 0.68
],
[
'year' => 2021,
'month'=> 05,
'value'=> 0.58
],
[
'year' => 2021,
'month'=> 06,
'value'=> 0.79
],
[
'year' => 2021,
'month'=> 07,
'value'=> 0.98
]
];
$ex = new Exsmooth();
$hasil = $ex->hitung($data);
$this->load->view('result', ['hasil' => $hasil]);
}
}
Buatlah sebuah view dengan nama result.php, dan masukkan kode berikut.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hasil Perhitungan Single Exponential Smoothing</title>
</head>
<body>
<?php foreach($hasil['data'] as $k=>$v) { ?>
<p>Konstant : <?= $k ?></p>
<table>
<thead>
<tr>
<th>Periode</th>
<th>Nilai</th>
<th>Ramalan</th>
<th>Error</th>
</tr>
</thead>
<tbody>
<?php foreach($v as $n => $val) { ?>
<tr>
<td><?= $val['periode'] ?></td>
<td><?= $val['xt'] ?></td>
<td><?= $val['ft'] ?></td>
<td><?= $val['error'] ?></td>
</tr>
<?php } ?>
</tbody>
<tfoot>
<tr>
<th colspan="3">Root Mean Square Error (RMSE)</th>
<th><?= $hasil['total']['rmse'][$k] ?></th>
</tr>
<tr>
<th colspan="3">Mean Square Error (MAPE)</th>
<th><?= $hasil['total']['mape'][$k] ?></th>
</tr>
<tr>
<th colspan="3">Mean Precentage Absolute Error (MSE)</th>
<th><?= $hasil['total']['mse'][$k] ?></th>
</tr>
<tr>
<th colspan="3">Mean Absolute Error (MAE)</th>
<th><?= $hasil['total']['mae'][$k] ?></th>
</tr>
</tfoot>
</table>
<?php } ?>
</body>
</html>
Tampilan hasil dari view seperti berikut.
Sekian tutorial kali ini. Jika teman-teman memiliki pertanyaan atau saran mengenai artikel ini, jangan ragu untuk meninggalkan komentar pada form di bawah ini.
Semoga bermanfaat.
Komentar 1