Membuktikan Kausalitas (Hubungan Sebab Akibat)

Rahmat.. proof to me did our last year investment increase our market share? I want to valid proof showing investment and increase of market share has causality effect.

Benarlah apa yg diajarkan di kelas data science bulan lalu yang sampai sekarang saya masih ingat. Yang paling penting dari data science itu adalah pertanyaanya! Pertanyaan bos saya itu juga menurut saya mahal dan jawabannya tidak mudah. Saya segera mencari statistical tools yg ada di kepala saya untuk menjawab pertanyaan tersebut tapi so far belum ada yg cocok. Better saya cari dulu bagaimana seharusnya kerangka berpikir untuk membuktikan hubungan kausalitas.

Jika mendengar kausalitas saya terus saja teringat sebuah kalimat correlation doesn’t imply causation. Ini adalah ilmu sejak kuliah namun saya belum  bertanya lebih lanjut.. lalu apa yg bisa membuktikan kausalitas? Nah ternyata tidak mudah membuktikan adanya kausalitas. Sebaliknya jika kita mampu membuktikan kausalitas maka kita bisa bercerita lebih banyak.

  • Supportive hubungan suatu variabel yg membuat variabel lain meningkat. Contohnya efek pemberian pupuk jenis tertentu dalam meningkatkan produksi panen padi atau pemberian jenis obat tertentu dalam menyembuhkan penyakit tertentu.
  • Prevention bisa juga kita mengatakan bahwa kita bisa menghindari terjadinya hal buruk atas tindakan tertentu. Misalnya penambahan rem jenis tertentu mengurangi angka tabrakan pada mobil atau motor.
  • Preparation  berguna untuk mempersiapkan diri atas konsekuensi tertentu. Misalnya banjir atau bencana

Dari ketiga hal diatas kasus saya sepertinya lebih cocok pada kondisi pertama yakni investasi dalam menaikkan market share. Hubungannya supportive,  oleh karena itu pendekatan rancangan percobaan (experimental design) sepertinya akan lebih cocok.

Hal-hal yg saya harus perhatikan adalah sebagai berikut:

  1. Kekuatan hubungan. Karena ini adalah kasus non-laboratorium saya tidak bisa mengkondisikan faktor-faktor yg terlibat selayaknya lab namun hubungan antar target bisa saya gambarkan dengan menggunakan korelasi.
  2. Replication. Naah ini dia juga yg lumayan njelimet bagaimana melakukan pengulangan jika kondisinya tidak seragam. Let me know jika ada ide ya guys!
  3. Specificity. Jika tidak ada penjelasan lain mungkin memang itulah penyebabnya.
  4. Temporality. Hubungannya akan lebih kelihatan jika akibat muncul setelah sebabnya.. (yg ini masih bingung nih)
  5. Gradient. Jika ada pola kenaikan atau penurunan yg jelas maka most likely ada kausalitas. Kayaknya kita bisa minta tolong regression untuk membuktikan ini.
  6. Plausability. help me with this.. hahaha
  7. Coherence. Jika sudah ada teori yg pernah menunjukkan adanya hubungan kausalitas maka data kita mungkin akan memperkuat teori tsb.

Kayaknya saya juga perlu untuk menambahkan beberapa catatan berikut sebelum melakukan perhitungan.

Periksa Metrik

  • Gunakan original metrik, hindari indexing dan rasio.
  • Lanjutkan dengan menghitung korelasi antar variabel.
  • Pastikan sample nya cukup untuk menarik kesimpulan.
  • Pastikan tidak ada outlier

 

Pastikan Hubungan

Dari scatter plot, perhatikan hubungan antar variable nya (gradientnya). Perhatikan juga urutan kejadiannya, karena bisa jadi akibatnya tidak terjadi pada waktu yg dekat. Sebaiknya di cek dengan lag pada time series analysis.

 

Validasi Penjelasan

Ada dua langkah yg kita bisa lakukan disini yakni eksperimen dan konsistensi. Dua hal ini adalah hal paling meyakinkan yg bisa kita lakukan, susunlah hipotesis dan buatlah sebuah pembuktian atas hipotesis tersebut. Sebaiknya kita gunakan vairable kontrol agar kita bisa membandingkan efek dari faktor yg kita berikan.

Source:

https://statswithcats.wordpress.com/2015/01/01/how-to-tell-if-correlation-implies-causation/ 

 

 

Advertisements

Basic Data Science Knowledge Part 2: Control Structure, Function dan Class

Dalam menuliskan code di python, adakalanya kita menghadapi perhitungan yg membutuhkan pengulangan. Nah sebagaimana di dalam bahasa pemrograman yg lain, di python juga ada cara melakukan looping untuk lebih mengefisienkan langkah kerja kita.

for i in range(20):
if i%3 == 0:
print i
if i%5 == 0:
print “Bingo!”
print “—“

Di python kita harus memperhatikan indentasi, jika indentasi kita tidak sesuai dengan format python maka proses looping tidak akan perjalan.

Function digunakan juga untuk mempermudah query yang kita buat. Jika kita mempunyai perhitungan yang cukup kompleks namun kita gunakan berulang-ulang maka ada baiknya kita menggunakan function untuk menyimpan perhitungan tadi.

>def kali(x,y):
z=x*y
return z

>kali(5,3)

15

Class

Jika kita membutuhkan sebuah environment yg terlepas dari environment default nya python. Maka salah satu cara untuk melakukan itu adalah dengan menggunakan class. Contoh penggunaan class adalah sebagai berikut

Contoh Class

class Product:
__vendor_message = “Ini adalah rahasia”
name = “”
price = “”
size = “”
unit = “”

def __init__(self, name):
print “Ini adalah constructor”
self.name = name
self.unit = “Gb”
self.size = 10

def get_vendor_message(self):
print self.__vendor_message

def set_price(self, price):
self.price = price

p = Product(“xtra combo”)
p.set_price(55000)

print “%s dengan ukuran %s %s harganya Rp. %d” % (p.name, p.size, p.unit, p.price)
# print p.__vendor_message

p.get_vendor_message()

p1 = Product(“xtra combo”)
p1.set_price(5000)

print “%s dengan ukuran %s %s harganya Rp. %d” % (p.name, p.size, p.unit, p.price)

Source for function: https://www.petanikode.com/tutorial/python

 

 

 

 

 

 

Basic Data Science Knowledge: Python (Part 1)

Python saat ini menjadi tren bahasa yg paling banyak digunakan dalam dunia data science. Walaupun ada bagian-bagian yang masih belum bisa menggantikan R, namun integrasinya dengan ekosistem HADOOP ini lah yang membuatnya menjadi sangat terkenal. Well, tulisan ini hanya catatan pribadi sebagai pengingat dan contekan kalau-kalau lupa.

Saya menginstall python dengan sepaket dengan hanya mendownload anaconda, jadi ringkas di dalamnya ada spyder, jupyter dkk buat GUI nya. Secara personal saya lebih suka menggunakan Jupyter karena formatnya yang mirip dengan R-markdown style di R studio.

Untuk show datanya kita bisa menggunakan

>print (“Hello world”)

Untuk menambahkan komentar bisa menggunakan

> # Ini komentar

Komentar sering bgt saya pakai sebagai pengingat alasan saya menggunakan query tsb. Juga sangat berguna jika query saya digunakan oleh orang lain.

List

Di python sangat flexible kita bisa bikin array yang isinya campur-campur kayak gini.

> a=[99,”cahaya”,[“dilangit”,”eropa”]]

Untuk slicer dari list juga cukup mudah, kita bisa menggunakan index yg selalu dimulai dari 0.

>a[0] hasilnya adalah 99

Berikut contoh lain

>b=range(5)

[0, 1, 2, 3, 4]

>b.append(5)

[0, 1, 2, 3, 4, 5, 5]

>b.pop() #untuk mengetahui jumlah data

5

Dictionary atau Associative Array

Cirinya tidak menggunakan index namun menggunakan keys sehingga kita melakukan fungsi seperti lookup. Keys yg digunakan di dictionary ini sifatnya IMMUTABLE yang artinya tidak boleh diubah-ubah

d = {“duck”: “eend”, “water”: “water”}
d

{'duck': 'eend', 'water': 'water'}

Cara lookupnya

d[“duck”]

‘eend’

Tuple

Hal lain yg perlu dikenal di python adalah tuple. Ciri-cirinya adalah menggunakan kurung ( ) untuk membentuk tuple. Sifat dari tuple juga IMMUTABLE  artinya isinya tidak bisa diubah-ubah.

nama =(‘rahmat’, ‘hid’)
nama

('rahmat', 'hid')

Jika ubah isi tuple nya, maka hasilnya adalah ERROR.

nama[0]=’coding’

Error bla bla xxxx– karena tuple tidak support item assignment

Tuple bisa berisi value, list ,dictionary, object, dan lain-lain.

Variable

variable juga jenis wadah untuk menyimpan value, di python kita tidak perlu melakukan DECLARE variable. Kita bisa langsung membuat variable dan mengisinya dengan value yg kita inginkan. Perbedaannya variable isinya bisa dirubah-rubah.

Pada dasarnya semua hal adalah variable baik itu class, modul maupun fungsi.

var=”isi dengan nilai”
var

'isi dengan nilai'

Kayaknya ini dulu saja untuk yg basic, lagi-lagi tulisan ini buat pengingat saja. Cara paling efektif adalah coba langsung ya guys.

 

 

 

CSS-Nearby search

/* Always set the map height explicitly to define the size of the div
* element that contains the map. */
#map {
height: 100%;
}
/* Optional: Makes the sample page fill the window. */
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#right-panel {
font-family: ‘Roboto’,’sans-serif’;
line-height: 30px;
padding-left: 10px;
}

#right-panel select, #right-panel input {
font-size: 15px;
}

#right-panel select {
width: 100%;
}

#right-panel i {
font-size: 12px;
}
#right-panel {
font-family: Arial, Helvetica, sans-serif;
position: absolute;
right: 5px;
top: 60%;
margin-top: -195px;
height: 330px;
width: 200px;
padding: 5px;
z-index: 5;
border: 1px solid #999;
background: #fff;
}
h2 {
font-size: 22px;
margin: 0 0 5px 0;
}
ul {
list-style-type: none;
padding: 0;
margin: 0;
height: 271px;
width: 200px;
overflow-y: scroll;
}
li {
background-color: #f1f1f1;
padding: 10px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
li:nth-child(odd) {
background-color: #fcfcfc;

lo {
background-color: #f1f1f1;
padding: 10px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
lo:nth-child(odd) {
background-color: #fcfcfc;

}
#more {
width: 100%;
margin: 5px 0 0 0;
}

Java script-search nearby

// This example requires the Places library. Include the libraries=places
// parameter when you first load the API. For example:
// <script src=”https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places”&gt;

var map;

function initMap() {
// Create the map.-6.5404435,106.7970417
var pyrmont = {lat: -6.5404435, lng: 106.7970417};
map = new google.maps.Map(document.getElementById(‘map’), {
center: pyrmont,
zoom: 17
});

// Create the places service.
var service = new google.maps.places.PlacesService(map);
var getNextPage = null;
var moreButton = document.getElementById(‘more’);
moreButton.onclick = function() {
moreButton.disabled = true;
if (getNextPage) getNextPage();
};

// Perform a nearby search.
service.nearbySearch(
{location: pyrmont, radius: 500, type: [‘store’]},
function(results, status, pagination) {
if (status !== ‘OK’) return;

createMarkers(results);
moreButton.disabled = !pagination.hasNextPage;
getNextPage = pagination.hasNextPage && function() {
pagination.nextPage();
};
});
}

function createMarkers(places) {
var bounds = new google.maps.LatLngBounds();
var placesList = document.getElementById(‘places’);

for (var i = 0, place; place = places[i]; i++) {
var image = {
url: place.icon,
size: new google.maps.Size(71, 71),
origin: new google.maps.Point(0, 0),
anchor: new google.maps.Point(17, 34),
scaledSize: new google.maps.Size(25, 25)
};

var marker = new google.maps.Marker({
map: map,
icon: image,
title: place.name,
position: place.geometry.location
});

var li = document.createElement(‘li’);
li.textContent = place.name;
placesList.appendChild(li);

var lo = document.createElement(‘lo’);
lo.textContent = place.types;
placesList.appendChild(lo);

bounds.extend(place.geometry.location);
}
map.fitBounds(bounds);
}

Akibat regresi linear

Beberapa hari yg lalu saya tampil di depan rekan2 kerja saya dalam rangka sharing session yang biasanya dilaksanakan setiap jumat. Saya diminta utk menjelaskan apa saja6yg sudah dipelajari dari lynda.com. Itu lho situs belajar mandiri dari linkedin… Sebagai bentuk pertanggungjawaban sudah dapat akses premium jadilah hari itu saya maju.

Di lynda.com saya ambil beberapa course dasar seperti statistics foundation, data science dan juga business analytics. Saya semakin sadar bahwa gap skill yg saya miliki dibandingkan dengan ekspertis di luar sana. Fine. Dengan segala keterbatasan yang ada saya buat sebuah presentasi yg berjudul unboxing hubungan antar data. Isinya pokoknya menjelaskan kembali konsep korelasi dan juga regresi. Ternyataaaa hampir semua yg duduk menyaksikan gelisah berharap presentasi saya segera selesai… Hahaha. Walaupun demikian ada juga yg bertanya ttg konsep p-value. Damn!!

Finally presentasi berjalan dengan kegelisahan para hadirin…. Walaupun seminggu ini saya terus2an di godain dengan celetukan… Wooi datanya bisa diberesin tuh sama si rahmat pake regresi…. Wakakakak. Damn again!!

Presentasi data: Two long tail perspective…

Kerap kali saat anda sudah punya data dab anda punya kemampuan untuk melakukan penelitian, anda kesulitan untuk menyampaikan informasi kepada publik lewat susunan cerita yang menarik. Diskusi sore ini bersama big bos, saya menemukan sebuah pola pikir yang sangat menarik. Berawal dari saking banyaknya data yang kami miliki, kami kesulitan merangkai semua data itu menjadk sebuah cerita yang utuh. Hingga akhirnya muncul celetukan, pakai saja analisis two tail… Dalam hati.. Whaat? Baruu denger saya.

Pikiran saya langsung tertuju pada grafik sebaran normal dengan dua ekor dikiri dan dikanan. Bell Curve. Ternyata apa yg saya pikirkan terlalu rumit… Ternyata analisa ini sangat simpel namun dengan mengambil konsep sebaran data.

Kita pasti tahu bell curve… Nah dua tail atau ekor grafik ini menggambarkan posisi yang ekstrim dari data… Ekstrim besar dan ekstrim kecil… Misalkan kita menganalisis data sales maka salah satu opsi dalam menyampaikan informasi adalah dengan mengambil detail dari kedua tail. Ekstrim kanan menggambarkan sales yang penjualannya sangat tinggi, lets say top 95 percentile… Sedangkan di kiri kita ambil contoh untuk sales yg tidak achieve… Misalkan bottom 10 percentile. Dengan menggali detail kenapa kedua sales ini berada di sisi ekstrim sangatlah penting. Kita ingin agar sales yg ada dibagian tengah dapat mencontoh strategi sales yang berhasil dan menjauhi sales yg tdk achieve.

Harapan kita adalah nilai tengah dari sales yg skrg berkumpul ditengah dapat bergeser ke arah kanan yg secara total akan menaikkan sales performance secara keseluruhan.

Mengenal data geocode/spasial

Saat saya menyusun skripsi S1, saya mempertimbangkan untuk mengambil judul yang berkaitan dengan bionformatika namun apadaya ilmu saya masih sangat dangkal dan referensi yang saya miliki benar-benar terbatas. Akhirnya pilihan saya adalah topik yang lebih membumi yakni mengenai spasial analysis. Singkat cerita setelah masuk ke dunia kerja, saya menemukan ternyata banyak sekali informasi spasial yang digunakan. Tampilan grafiknya pun sudah cakep-cakep, jauh sekali dengan saat zaman saya kuliah dimana petanya pun hitam putih dan lokasi hanya ditunjukkan dengan titik dan warna.

maps_build9

contoh map dari tableau

Kombinasi antara informasi non spasial dengan informasi spasial benar-benar memberikan dampak yang besar dalam cara berpikir kita. Bagi ada yang sudah familiar dengan software-software visual analytic atau business intelligence tidak akan asing lagi menampilkan data dengan map chart, namun tulisan saya ini bermaksud memperkenalkan jenis data ini kepada mereka yang baru mengenal dunia visual analytic.

Hal pertama yang perlu kita tahu adalah konsep latitude dan longitude. Saya kutip saja nih pengertiannya:

Latitude adalah garis yang horisontal / mendatar. Titik 0 adalah sudut ekuator, tanda + menunjukan arah ke atas menuju kutub utara, sedangkan tanda minus di koordinat Latitude menuju ke kutub selatan.

Longitude adalah garis lintang . Angka dari sudut bundar bumi horisontal. Titik diawali dari 0 ke 180 derajat, dan 0 ke-180 ke arah sebaliknya.

link lengkapnya

Data long-lat inilah yang menjadi petunjuk kita untuk menemukan lokasi sebuah tempat di permukaan bumi. Baiklah supaya lebih konkrit saya telah mengunduh data sample di disini untuk kita visualkan.

Disini kita akan menggunakan software ms excel yang semua orang bisa menggunakannya. Setelah anda mengunduh datanya, kalian bisa membuat visualisasi seperti ini.map_excel_jadi

Beneran ini cuma bermodal ms excel 2016. Keren kan?? Coba bayangkan kalian bikin presentasi dengan menggunakan chart keren ini…Ada yang butuh tutorial untuk bikin map kayak gini? Let me know…