Pada notebook ini, akan dianalisis hasil eksperimen dengan membatasi banyak fitur yang digunakan, i.e. hanya top sekian most frequent unigrams di thread tersebut. Sekedar pengingat, metode yang digunakan adalah txt_comp_dist, fitur unigram, distance metric correlation, dan untuk setiap konfigurasi eksperimen dilakukan iterasi sebanyak 30 kali.

Import tools yang dibutuhkan dan atur agar matplotlib menggambar grafik secara inline.


In [1]:
import numpy as np
import pandas as pd
%matplotlib inline

Load hasil eksperimen dan tampilkan hasilnya.


In [2]:
df = pd.read_hdf('../reports/large-exp-uni-lim-feat.h5', 'df')

In [3]:
df


Out[3]:
num_norm 10 ... 80
num_oot 1 ... 8
num_top 1 3 5 ... 5
result base perf base perf base ... base perf
k 0 1 0 1 0 1 0 1 0 1 ... 2 3 4 5 0 1 2 3 4 5
method feature max_features metric norm_dir oot_dir
txt_comp_dist unigram 7 correlation bbs152930 bbs57549 0.909091 0.090909 0.866667 0.133333 0.727273 0.272727 0.500000 0.500000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
mus10142 0.909091 0.090909 0.966667 0.033333 0.727273 0.272727 0.733333 0.266667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
phy40008 0.909091 0.090909 0.866667 0.133333 0.727273 0.272727 0.466667 0.533333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
phy17301 bbs57549 0.909091 0.090909 0.766667 0.233333 0.727273 0.272727 0.866667 0.133333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
mus10142 0.909091 0.090909 0.866667 0.133333 0.727273 0.272727 0.966667 0.033333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
phy40008 0.909091 0.090909 0.766667 0.233333 0.727273 0.272727 0.566667 0.433333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
mus1139 bbs57549 0.909091 0.090909 0.866667 0.133333 0.727273 0.272727 0.366667 0.633333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
mus10142 0.909091 0.090909 0.966667 0.033333 0.727273 0.272727 0.700000 0.300000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
phy40008 0.909091 0.090909 0.633333 0.366667 0.727273 0.272727 0.533333 0.466667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
20 correlation bbs152930 bbs57549 0.909091 0.090909 0.733333 0.266667 0.727273 0.272727 0.500000 0.500000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.933333 0.066667 0.000000 0.000000 0.000000 0
mus10142 0.909091 0.090909 0.966667 0.033333 0.727273 0.272727 0.733333 0.266667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
phy40008 0.909091 0.090909 0.333333 0.666667 0.727273 0.272727 0.533333 0.466667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.966667 0.033333 0.000000 0.000000 0.000000 0
phy17301 bbs57549 0.909091 0.090909 0.666667 0.333333 0.727273 0.272727 0.633333 0.366667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
mus10142 0.909091 0.090909 0.933333 0.066667 0.727273 0.272727 0.866667 0.133333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
phy40008 0.909091 0.090909 0.433333 0.566667 0.727273 0.272727 0.433333 0.566667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
mus1139 bbs57549 0.909091 0.090909 0.600000 0.400000 0.727273 0.272727 0.333333 0.666667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
mus10142 0.909091 0.090909 0.966667 0.033333 0.727273 0.272727 0.833333 0.166667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
phy40008 0.909091 0.090909 0.233333 0.766667 0.727273 0.272727 0.166667 0.833333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
50 correlation bbs152930 bbs57549 0.909091 0.090909 0.933333 0.066667 0.727273 0.272727 0.166667 0.833333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.400000 0.166667 0.166667 0.166667 0.100000 0
mus10142 0.909091 0.090909 1.000000 0.000000 0.727273 0.272727 0.466667 0.533333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.733333 0.200000 0.000000 0.000000 0.066667 0
phy40008 0.909091 0.090909 0.566667 0.433333 0.727273 0.272727 0.166667 0.833333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.400000 0.133333 0.233333 0.133333 0.100000 0
phy17301 bbs57549 0.909091 0.090909 0.200000 0.800000 0.727273 0.272727 0.066667 0.933333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.933333 0.033333 0.033333 0.000000 0.000000 0
mus10142 0.909091 0.090909 0.500000 0.500000 0.727273 0.272727 0.266667 0.733333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
phy40008 0.909091 0.090909 0.133333 0.866667 0.727273 0.272727 0.033333 0.966667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.900000 0.100000 0.000000 0.000000 0.000000 0
mus1139 bbs57549 0.909091 0.090909 0.266667 0.733333 0.727273 0.272727 0.033333 0.966667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
mus10142 0.909091 0.090909 0.800000 0.200000 0.727273 0.272727 0.666667 0.333333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
phy40008 0.909091 0.090909 0.066667 0.933333 0.727273 0.272727 0.033333 0.966667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0
100 correlation bbs152930 bbs57549 0.909091 0.090909 0.333333 0.666667 0.727273 0.272727 0.000000 1.000000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.300000 0.033333 0.400000 0.266667 0.000000 0
mus10142 0.909091 0.090909 0.766667 0.233333 0.727273 0.272727 0.100000 0.900000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.233333 0.133333 0.266667 0.300000 0.066667 0
phy40008 0.909091 0.090909 0.300000 0.700000 0.727273 0.272727 0.033333 0.966667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.266667 0.000000 0.100000 0.500000 0.133333 0
phy17301 bbs57549 0.909091 0.090909 0.166667 0.833333 0.727273 0.272727 0.000000 1.000000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.233333 0.300000 0.400000 0.066667 0.000000 0
mus10142 0.909091 0.090909 0.566667 0.433333 0.727273 0.272727 0.033333 0.966667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.266667 0.200000 0.266667 0.166667 0.100000 0
phy40008 0.909091 0.090909 0.166667 0.833333 0.727273 0.272727 0.033333 0.966667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.333333 0.266667 0.266667 0.133333 0.000000 0
mus1139 bbs57549 0.909091 0.090909 0.266667 0.733333 0.727273 0.272727 0.000000 1.000000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.433333 0.166667 0.300000 0.066667 0.033333 0
mus10142 0.909091 0.090909 0.900000 0.100000 0.727273 0.272727 0.500000 0.500000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.666667 0.300000 0.033333 0.000000 0.000000 0
phy40008 0.909091 0.090909 0.266667 0.733333 0.727273 0.272727 0.000000 1.000000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.566667 0.133333 0.166667 0.100000 0.033333 0

36 rows × 116 columns

Lakukan agregasi hasil dan tampilkan hasilnya.


In [4]:
df_agg = df.groupby(level='max_features').mean().T.unstack(level='result')

In [5]:
df_agg


Out[5]:
max_features 7 20 50 100
result base perf base perf base perf base perf
num_norm num_oot num_top k
10 1 1 0 0.909091 0.840741 0.909091 0.651852 0.909091 0.496296 0.909091 0.414815
1 0.090909 0.159259 0.090909 0.348148 0.090909 0.503704 0.090909 0.585185
3 0 0.727273 0.633333 0.727273 0.559259 0.727273 0.211111 0.727273 0.077778
1 0.272727 0.366667 0.272727 0.440741 0.272727 0.788889 0.272727 0.922222
5 0 0.545455 0.555556 0.545455 0.451852 0.545455 0.170370 0.545455 0.022222
1 0.454545 0.444444 0.454545 0.548148 0.454545 0.829630 0.454545 0.977778
4 1 0 0.714286 0.614815 0.714286 0.433333 0.714286 0.348148 0.714286 0.329630
1 0.285714 0.385185 0.285714 0.566667 0.285714 0.651852 0.285714 0.670370
3 0 0.329670 0.388889 0.329670 0.177778 0.329670 0.077778 0.329670 0.025926
1 0.494505 0.259259 0.494505 0.255556 0.494505 0.248148 0.494505 0.244444
2 0.164835 0.285185 0.164835 0.418519 0.164835 0.511111 0.164835 0.500000
3 0.010989 0.066667 0.010989 0.148148 0.010989 0.162963 0.010989 0.229630
5 0 0.125874 0.307407 0.125874 0.111111 0.125874 0.048148 0.125874 0.007407
1 0.419580 0.203704 0.419580 0.237037 0.419580 0.133333 0.419580 0.085185
2 0.359640 0.218519 0.359640 0.211111 0.359640 0.270370 0.359640 0.203704
3 0.089910 0.140741 0.089910 0.307407 0.089910 0.381481 0.089910 0.348148
4 0.004995 0.129630 0.004995 0.133333 0.004995 0.166667 0.004995 0.355556
8 1 0 0.555556 0.714815 0.555556 0.485185 0.555556 0.355556 0.555556 0.385185
1 0.444444 0.285185 0.444444 0.514815 0.444444 0.644444 0.444444 0.614815
3 0 0.147059 0.266667 0.147059 0.222222 0.147059 0.129630 0.147059 0.025926
1 0.441176 0.248148 0.441176 0.225926 0.441176 0.225926 0.441176 0.288889
2 0.343137 0.337037 0.343137 0.340741 0.343137 0.381481 0.343137 0.477778
3 0.068627 0.148148 0.068627 0.211111 0.068627 0.262963 0.068627 0.207407
5 0 0.029412 0.166667 0.029412 0.088889 0.029412 0.040741 0.029412 0.018519
1 0.196078 0.144444 0.196078 0.140741 0.196078 0.155556 0.196078 0.092593
2 0.392157 0.207407 0.392157 0.237037 0.392157 0.188889 0.392157 0.174074
3 0.294118 0.211111 0.294118 0.188889 0.294118 0.274074 0.294118 0.288889
4 0.081699 0.225926 0.081699 0.259259 0.081699 0.262963 0.081699 0.340741
5 0.006536 0.044444 0.006536 0.085185 0.006536 0.077778 0.006536 0.085185
80 1 1 0 0.987654 1.000000 0.987654 0.996296 0.987654 0.996296 0.987654 0.959259
1 0.012346 0.000000 0.012346 0.003704 0.012346 0.003704 0.012346 0.040741
3 0 0.962963 1.000000 0.962963 0.996296 0.962963 0.951852 0.962963 0.907407
1 0.037037 0.000000 0.037037 0.003704 0.037037 0.048148 0.037037 0.092593
5 0 0.938272 1.000000 0.938272 0.996296 0.938272 0.874074 0.938272 0.762963
1 0.061728 0.000000 0.061728 0.003704 0.061728 0.125926 0.061728 0.237037
4 1 0 0.952381 1.000000 0.952381 0.996296 0.952381 0.977778 0.952381 0.848148
1 0.047619 0.000000 0.047619 0.003704 0.047619 0.022222 0.047619 0.151852
3 0 0.862264 1.000000 0.862264 0.996296 0.862264 0.855556 0.862264 0.648148
1 0.132656 0.000000 0.132656 0.003704 0.132656 0.122222 0.132656 0.270370
2 0.005038 0.000000 0.005038 0.000000 0.005038 0.022222 0.005038 0.070370
3 0.000042 0.000000 0.000042 0.000000 0.000042 0.000000 0.000042 0.011111
5 0 0.778699 1.000000 0.778699 0.996296 0.778699 0.811111 0.778699 0.481481
1 0.204921 0.000000 0.204921 0.003704 0.204921 0.148148 0.204921 0.251852
2 0.015968 0.000000 0.015968 0.000000 0.015968 0.025926 0.015968 0.222222
3 0.000409 0.000000 0.000409 0.000000 0.000409 0.014815 0.000409 0.040741
4 0.000003 0.000000 0.000003 0.000000 0.000003 0.000000 0.000003 0.003704
8 1 0 0.909091 1.000000 0.909091 1.000000 0.909091 0.940741 0.909091 0.837037
1 0.090909 0.000000 0.090909 0.000000 0.090909 0.059259 0.090909 0.162963
3 0 0.748706 1.000000 0.748706 1.000000 0.748706 0.825926 0.748706 0.481481
1 0.230371 0.000000 0.230371 0.000000 0.230371 0.107407 0.230371 0.351852
2 0.020413 0.000000 0.020413 0.000000 0.020413 0.066667 0.020413 0.140741
3 0.000510 0.000000 0.000510 0.000000 0.000510 0.000000 0.000510 0.025926
5 0 0.613645 1.000000 0.613645 0.988889 0.613645 0.818519 0.613645 0.366667
1 0.322971 0.000000 0.322971 0.011111 0.322971 0.070370 0.322971 0.170370
2 0.058722 0.000000 0.058722 0.000000 0.058722 0.048148 0.058722 0.244444
3 0.004517 0.000000 0.004517 0.000000 0.004517 0.033333 0.004517 0.177778
4 0.000143 0.000000 0.000143 0.000000 0.000143 0.029630 0.000143 0.040741
5 0.000001 0.000000 0.000001 0.000000 0.000001 0.000000 0.000001 0.000000

Selanjutnya, tabel di atas akan disajikan dalam bentuk grafik. Sebelumnya, buang dulu kolom yang tidak dibutuhkan/redundan.


In [6]:
df_plot = df_agg.copy()
del df_plot[(20,'base')]
del df_plot[(50,'base')]
del df_plot[(100,'base')]

In [7]:
df_plot


Out[7]:
max_features 7 20 50 100
result base perf perf perf perf
num_norm num_oot num_top k
10 1 1 0 0.909091 0.840741 0.651852 0.496296 0.414815
1 0.090909 0.159259 0.348148 0.503704 0.585185
3 0 0.727273 0.633333 0.559259 0.211111 0.077778
1 0.272727 0.366667 0.440741 0.788889 0.922222
5 0 0.545455 0.555556 0.451852 0.170370 0.022222
1 0.454545 0.444444 0.548148 0.829630 0.977778
4 1 0 0.714286 0.614815 0.433333 0.348148 0.329630
1 0.285714 0.385185 0.566667 0.651852 0.670370
3 0 0.329670 0.388889 0.177778 0.077778 0.025926
1 0.494505 0.259259 0.255556 0.248148 0.244444
2 0.164835 0.285185 0.418519 0.511111 0.500000
3 0.010989 0.066667 0.148148 0.162963 0.229630
5 0 0.125874 0.307407 0.111111 0.048148 0.007407
1 0.419580 0.203704 0.237037 0.133333 0.085185
2 0.359640 0.218519 0.211111 0.270370 0.203704
3 0.089910 0.140741 0.307407 0.381481 0.348148
4 0.004995 0.129630 0.133333 0.166667 0.355556
8 1 0 0.555556 0.714815 0.485185 0.355556 0.385185
1 0.444444 0.285185 0.514815 0.644444 0.614815
3 0 0.147059 0.266667 0.222222 0.129630 0.025926
1 0.441176 0.248148 0.225926 0.225926 0.288889
2 0.343137 0.337037 0.340741 0.381481 0.477778
3 0.068627 0.148148 0.211111 0.262963 0.207407
5 0 0.029412 0.166667 0.088889 0.040741 0.018519
1 0.196078 0.144444 0.140741 0.155556 0.092593
2 0.392157 0.207407 0.237037 0.188889 0.174074
3 0.294118 0.211111 0.188889 0.274074 0.288889
4 0.081699 0.225926 0.259259 0.262963 0.340741
5 0.006536 0.044444 0.085185 0.077778 0.085185
80 1 1 0 0.987654 1.000000 0.996296 0.996296 0.959259
1 0.012346 0.000000 0.003704 0.003704 0.040741
3 0 0.962963 1.000000 0.996296 0.951852 0.907407
1 0.037037 0.000000 0.003704 0.048148 0.092593
5 0 0.938272 1.000000 0.996296 0.874074 0.762963
1 0.061728 0.000000 0.003704 0.125926 0.237037
4 1 0 0.952381 1.000000 0.996296 0.977778 0.848148
1 0.047619 0.000000 0.003704 0.022222 0.151852
3 0 0.862264 1.000000 0.996296 0.855556 0.648148
1 0.132656 0.000000 0.003704 0.122222 0.270370
2 0.005038 0.000000 0.000000 0.022222 0.070370
3 0.000042 0.000000 0.000000 0.000000 0.011111
5 0 0.778699 1.000000 0.996296 0.811111 0.481481
1 0.204921 0.000000 0.003704 0.148148 0.251852
2 0.015968 0.000000 0.000000 0.025926 0.222222
3 0.000409 0.000000 0.000000 0.014815 0.040741
4 0.000003 0.000000 0.000000 0.000000 0.003704
8 1 0 0.909091 1.000000 1.000000 0.940741 0.837037
1 0.090909 0.000000 0.000000 0.059259 0.162963
3 0 0.748706 1.000000 1.000000 0.825926 0.481481
1 0.230371 0.000000 0.000000 0.107407 0.351852
2 0.020413 0.000000 0.000000 0.066667 0.140741
3 0.000510 0.000000 0.000000 0.000000 0.025926
5 0 0.613645 1.000000 0.988889 0.818519 0.366667
1 0.322971 0.000000 0.011111 0.070370 0.170370
2 0.058722 0.000000 0.000000 0.048148 0.244444
3 0.004517 0.000000 0.000000 0.033333 0.177778
4 0.000143 0.000000 0.000000 0.029630 0.040741
5 0.000001 0.000000 0.000000 0.000000 0.000000

Selanjutnya, sajikan tabel dalam bentuk grafik. Warna biru, hijau, merah, cyan, dan ungu masing-masing merepresentasikan baseline, 7 fitur, 20 fitur, 50 fitur, dan 100 fitur berturut-turut.


In [8]:
grouped = df_plot.groupby(level=['num_norm','num_oot','num_top'])
for name, group in grouped:
    group.plot(kind='bar', use_index=False, legend=False, ylim=(0.,1.), title='num_norm={}, num_oot={}, num_top={}'.format(*name))


Selanjutnya, seperti biasa, akan dihitung expected value-nya.


In [9]:
ngroup = len(grouped)
data = np.empty((ngroup, 8))
index = []
for i, (name, _) in enumerate(grouped):
    df_tmp = df_agg.loc[name]
    prod = df_tmp.T * np.array(df_tmp.index)
    exp_val = prod.sum(axis=1)
    data[i, :] = exp_val
    index.append(name)

In [10]:
index = pd.MultiIndex.from_tuples(index, names=['num_norm','num_oot','num_top'])
columns = df_agg.columns.copy()

In [11]:
result = pd.DataFrame(data, index=index, columns=columns)

In [12]:
result


Out[12]:
max_features 7 20 50 100
result base perf base perf base perf base perf
num_norm num_oot num_top
10 1 1 0.090909 0.159259 0.090909 0.348148 0.090909 0.503704 0.090909 0.585185
3 0.272727 0.366667 0.272727 0.440741 0.272727 0.788889 0.272727 0.922222
5 0.454545 0.444444 0.454545 0.548148 0.454545 0.829630 0.454545 0.977778
4 1 0.285714 0.385185 0.285714 0.566667 0.285714 0.651852 0.285714 0.670370
3 0.857143 1.029630 0.857143 1.537037 0.857143 1.759259 0.857143 1.933333
5 1.428571 1.581481 1.428571 2.114815 1.428571 2.485185 1.428571 2.959259
8 1 0.444444 0.285185 0.444444 0.514815 0.444444 0.644444 0.444444 0.614815
3 1.333333 1.366667 1.333333 1.540741 1.333333 1.777778 1.333333 1.866667
5 2.222222 2.318519 2.222222 2.644444 2.222222 2.796296 2.222222 3.096296
80 1 1 0.012346 0.000000 0.012346 0.003704 0.012346 0.003704 0.012346 0.040741
3 0.037037 0.000000 0.037037 0.003704 0.037037 0.048148 0.037037 0.092593
5 0.061728 0.000000 0.061728 0.003704 0.061728 0.125926 0.061728 0.237037
4 1 0.047619 0.000000 0.047619 0.003704 0.047619 0.022222 0.047619 0.151852
3 0.142857 0.000000 0.142857 0.003704 0.142857 0.166667 0.142857 0.444444
5 0.238095 0.000000 0.238095 0.003704 0.238095 0.244444 0.238095 0.833333
8 1 0.090909 0.000000 0.090909 0.000000 0.090909 0.059259 0.090909 0.162963
3 0.272727 0.000000 0.272727 0.000000 0.272727 0.240741 0.272727 0.711111
5 0.454545 0.000000 0.454545 0.011111 0.454545 0.385185 0.454545 1.355556

Dapat dilihat pada tabel di atas bahwa secara umum, pengurangan jumlah fitur akan berdampak sangat buruk terhadap performa metode, apalagi untuk 7 fitur dan 80 normal posts, nilai expected value-nya nol! Namun, lain halnya jika distance metric yang digunakan adalah euclidean...