Sekarang, akan dianalisi hasil eksperimen dengan membatasi jumlah fitur, i.e. menggunakan hanya top sekian most frequent unigrams di thread tersebut, namun dengan menggunakan distance metric euclidean.

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-unigram-limited-feats.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 euclidean bbs152930 bbs57549 0.909091 0.090909 0.066667 0.933333 0.727273 0.272727 0.133333 0.866667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.000000 0.000000 0.066667 0.100000 0.833333
mus10142 0.909091 0.090909 0.033333 0.966667 0.727273 0.272727 0.100000 0.900000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000
phy40008 0.909091 0.090909 0.166667 0.833333 0.727273 0.272727 0.100000 0.900000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000
phy17301 bbs57549 0.909091 0.090909 0.033333 0.966667 0.727273 0.272727 0.000000 1.000000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.000000 0.000000 0.000000 0.033333 0.966667
mus10142 0.909091 0.090909 0.033333 0.966667 0.727273 0.272727 0.000000 1.000000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000
phy40008 0.909091 0.090909 0.100000 0.900000 0.727273 0.272727 0.133333 0.866667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.133333 0.266667 0.333333 0.166667 0.100000
mus1139 bbs57549 0.909091 0.090909 0.133333 0.866667 0.727273 0.272727 0.133333 0.866667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.033333 0.066667 0.000000 0.200000 0.700000
mus10142 0.909091 0.090909 0.766667 0.233333 0.727273 0.272727 0.400000 0.600000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.033333 0.266667 0.233333 0.200000 0.200000 0.066667
phy40008 0.909091 0.090909 0.200000 0.800000 0.727273 0.272727 0.166667 0.833333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.100000 0.100000 0.133333 0.233333 0.433333
20 euclidean bbs152930 bbs57549 0.909091 0.090909 0.133333 0.866667 0.727273 0.272727 0.133333 0.866667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.133333 0.233333 0.300000 0.200000 0.133333
mus10142 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 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000
phy40008 0.909091 0.090909 0.133333 0.866667 0.727273 0.272727 0.200000 0.800000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.000000 0.100000 0.300000 0.266667 0.333333
phy17301 bbs57549 0.909091 0.090909 0.033333 0.966667 0.727273 0.272727 0.033333 0.966667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.100000 0.200000 0.133333 0.300000 0.266667
mus10142 0.909091 0.090909 0.000000 1.000000 0.727273 0.272727 0.000000 1.000000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.033333 0.200000 0.266667 0.266667 0.233333
phy40008 0.909091 0.090909 0.366667 0.633333 0.727273 0.272727 0.066667 0.933333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.033333 0.433333 0.333333 0.133333 0.066667 0.000000
mus1139 bbs57549 0.909091 0.090909 0.266667 0.733333 0.727273 0.272727 0.166667 0.833333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.066667 0.100000 0.166667 0.233333 0.200000 0.233333
mus10142 0.909091 0.090909 0.366667 0.633333 0.727273 0.272727 0.433333 0.566667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.233333 0.433333 0.100000 0.166667 0.033333 0.033333
phy40008 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 0.266667 0.033333 0.300000 0.233333 0.166667 0.000000
50 euclidean bbs152930 bbs57549 0.909091 0.090909 0.166667 0.833333 0.727273 0.272727 0.066667 0.933333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.033333 0.400000 0.500000 0.033333 0.033333
mus10142 0.909091 0.090909 0.033333 0.966667 0.727273 0.272727 0.000000 1.000000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.000000 0.000000 0.300000 0.200000 0.500000
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.000000 0.000000 0.033333 0.733333 0.233333 0.000000
phy17301 bbs57549 0.909091 0.090909 0.133333 0.866667 0.727273 0.272727 0.000000 1.000000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.066667 0.133333 0.533333 0.200000 0.066667
mus10142 0.909091 0.090909 0.100000 0.900000 0.727273 0.272727 0.000000 1.000000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.033333 0.100000 0.466667 0.233333 0.166667
phy40008 0.909091 0.090909 0.466667 0.533333 0.727273 0.272727 0.100000 0.900000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.200000 0.266667 0.433333 0.066667 0.033333 0.000000
mus1139 bbs57549 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 0.200000 0.400000 0.300000 0.000000 0.100000 0.000000
mus10142 0.909091 0.090909 0.400000 0.600000 0.727273 0.272727 0.533333 0.466667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.133333 0.600000 0.133333 0.100000 0.033333 0.000000
phy40008 0.909091 0.090909 0.133333 0.866667 0.727273 0.272727 0.066667 0.933333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.266667 0.333333 0.333333 0.033333 0.033333 0.000000
100 euclidean bbs152930 bbs57549 0.909091 0.090909 0.200000 0.800000 0.727273 0.272727 0.033333 0.966667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.100000 0.266667 0.366667 0.266667 0.000000
mus10142 0.909091 0.090909 0.000000 1.000000 0.727273 0.272727 0.000000 1.000000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.000000 0.000000 0.100000 0.800000 0.100000
phy40008 0.909091 0.090909 0.233333 0.766667 0.727273 0.272727 0.066667 0.933333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.133333 0.166667 0.333333 0.366667 0.000000
phy17301 bbs57549 0.909091 0.090909 0.133333 0.866667 0.727273 0.272727 0.000000 1.000000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.033333 0.100000 0.233333 0.466667 0.166667
mus10142 0.909091 0.090909 0.000000 1.000000 0.727273 0.272727 0.000000 1.000000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.000000 0.000000 0.100000 0.333333 0.433333 0.133333
phy40008 0.909091 0.090909 0.233333 0.766667 0.727273 0.272727 0.066667 0.933333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.133333 0.300000 0.400000 0.133333 0.033333 0.000000
mus1139 bbs57549 0.909091 0.090909 0.100000 0.900000 0.727273 0.272727 0.033333 0.966667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.133333 0.466667 0.300000 0.100000 0.000000 0.000000
mus10142 0.909091 0.090909 0.400000 0.600000 0.727273 0.272727 0.500000 0.500000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.166667 0.333333 0.333333 0.166667 0.000000 0.000000
phy40008 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 0.366667 0.300000 0.300000 0.033333 0.000000 0.000000

36 rows × 116 columns

Lakukan agregasi...


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.170370 0.909091 0.181481 0.909091 0.181481 0.909091 0.174074
1 0.090909 0.829630 0.090909 0.818519 0.090909 0.818519 0.090909 0.825926
3 0 0.727273 0.129630 0.727273 0.122222 0.727273 0.092593 0.727273 0.081481
1 0.272727 0.870370 0.272727 0.877778 0.272727 0.907407 0.272727 0.918519
5 0 0.545455 0.062963 0.545455 0.044444 0.545455 0.062963 0.545455 0.070370
1 0.454545 0.937037 0.454545 0.955556 0.454545 0.937037 0.454545 0.929630
4 1 0 0.714286 0.174074 0.714286 0.100000 0.714286 0.122222 0.714286 0.144444
1 0.285714 0.825926 0.285714 0.900000 0.285714 0.877778 0.285714 0.855556
3 0 0.329670 0.048148 0.329670 0.040741 0.329670 0.059259 0.329670 0.070370
1 0.494505 0.237037 0.494505 0.185185 0.494505 0.244444 0.494505 0.181481
2 0.164835 0.244444 0.164835 0.344444 0.164835 0.285185 0.164835 0.388889
3 0.010989 0.470370 0.010989 0.429630 0.010989 0.411111 0.010989 0.359259
5 0 0.125874 0.025926 0.125874 0.037037 0.125874 0.029630 0.125874 0.022222
1 0.419580 0.114815 0.419580 0.085185 0.419580 0.114815 0.419580 0.151852
2 0.359640 0.225926 0.359640 0.285185 0.359640 0.218519 0.359640 0.251852
3 0.089910 0.225926 0.089910 0.255556 0.089910 0.288889 0.089910 0.270370
4 0.004995 0.407407 0.004995 0.337037 0.004995 0.348148 0.004995 0.303704
8 1 0 0.555556 0.066667 0.555556 0.125926 0.555556 0.118519 0.555556 0.103704
1 0.444444 0.933333 0.444444 0.874074 0.444444 0.881481 0.444444 0.896296
3 0 0.147059 0.037037 0.147059 0.051852 0.147059 0.025926 0.147059 0.044444
1 0.441176 0.125926 0.441176 0.159259 0.441176 0.162963 0.441176 0.155556
2 0.343137 0.355556 0.343137 0.318519 0.343137 0.337037 0.343137 0.362963
3 0.068627 0.481481 0.068627 0.470370 0.068627 0.474074 0.068627 0.437037
5 0 0.029412 0.014815 0.029412 0.029630 0.029412 0.018519 0.029412 0.033333
1 0.196078 0.081481 0.196078 0.085185 0.196078 0.081481 0.196078 0.085185
2 0.392157 0.200000 0.392157 0.181481 0.392157 0.218519 0.392157 0.181481
3 0.294118 0.248148 0.294118 0.255556 0.294118 0.200000 0.294118 0.218519
4 0.081699 0.222222 0.081699 0.248148 0.081699 0.288889 0.081699 0.288889
5 0.006536 0.233333 0.006536 0.200000 0.006536 0.192593 0.006536 0.192593
80 1 1 0 0.987654 0.292593 0.987654 0.559259 0.987654 0.725926 0.987654 0.785185
1 0.012346 0.707407 0.012346 0.440741 0.012346 0.274074 0.012346 0.214815
3 0 0.962963 0.277778 0.962963 0.555556 0.962963 0.566667 0.962963 0.614815
1 0.037037 0.722222 0.037037 0.444444 0.037037 0.433333 0.037037 0.385185
5 0 0.938272 0.281481 0.938272 0.507407 0.938272 0.488889 0.938272 0.514815
1 0.061728 0.718519 0.061728 0.492593 0.061728 0.511111 0.061728 0.485185
4 1 0 0.952381 0.066667 0.952381 0.144444 0.952381 0.322222 0.952381 0.459259
1 0.047619 0.933333 0.047619 0.855556 0.047619 0.677778 0.047619 0.540741
3 0 0.862264 0.040741 0.862264 0.133333 0.862264 0.225926 0.862264 0.251852
1 0.132656 0.133333 0.132656 0.307407 0.132656 0.437037 0.132656 0.325926
2 0.005038 0.181481 0.005038 0.296296 0.005038 0.218519 0.005038 0.385185
3 0.000042 0.644444 0.000042 0.262963 0.000042 0.118519 0.000042 0.037037
5 0 0.778699 0.044444 0.778699 0.122222 0.778699 0.155556 0.778699 0.185185
1 0.204921 0.140741 0.204921 0.285185 0.204921 0.307407 0.204921 0.322222
2 0.015968 0.192593 0.015968 0.300000 0.015968 0.244444 0.015968 0.214815
3 0.000409 0.192593 0.000409 0.196296 0.000409 0.259259 0.000409 0.185185
4 0.000003 0.429630 0.000003 0.096296 0.000003 0.033333 0.000003 0.092593
8 1 0 0.909091 0.003704 0.909091 0.051852 0.909091 0.203704 0.909091 0.292593
1 0.090909 0.996296 0.090909 0.948148 0.090909 0.796296 0.090909 0.707407
3 0 0.748706 0.000000 0.748706 0.070370 0.748706 0.092593 0.748706 0.151852
1 0.230371 0.066667 0.230371 0.114815 0.230371 0.351852 0.230371 0.251852
2 0.020413 0.088889 0.020413 0.159259 0.020413 0.259259 0.020413 0.429630
3 0.000510 0.844444 0.000510 0.655556 0.000510 0.296296 0.000510 0.166667
5 0 0.613645 0.003704 0.613645 0.066667 0.613645 0.088889 0.613645 0.088889
1 0.322971 0.059259 0.322971 0.140741 0.322971 0.192593 0.322971 0.185185
2 0.058722 0.074074 0.058722 0.181481 0.058722 0.207407 0.058722 0.218519
3 0.004517 0.081481 0.004517 0.196296 0.004517 0.303704 0.004517 0.200000
4 0.000143 0.103704 0.000143 0.166667 0.000143 0.122222 0.000143 0.262963
5 0.000001 0.677778 0.000001 0.248148 0.000001 0.085185 0.000001 0.044444

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.170370 0.181481 0.181481 0.174074
1 0.090909 0.829630 0.818519 0.818519 0.825926
3 0 0.727273 0.129630 0.122222 0.092593 0.081481
1 0.272727 0.870370 0.877778 0.907407 0.918519
5 0 0.545455 0.062963 0.044444 0.062963 0.070370
1 0.454545 0.937037 0.955556 0.937037 0.929630
4 1 0 0.714286 0.174074 0.100000 0.122222 0.144444
1 0.285714 0.825926 0.900000 0.877778 0.855556
3 0 0.329670 0.048148 0.040741 0.059259 0.070370
1 0.494505 0.237037 0.185185 0.244444 0.181481
2 0.164835 0.244444 0.344444 0.285185 0.388889
3 0.010989 0.470370 0.429630 0.411111 0.359259
5 0 0.125874 0.025926 0.037037 0.029630 0.022222
1 0.419580 0.114815 0.085185 0.114815 0.151852
2 0.359640 0.225926 0.285185 0.218519 0.251852
3 0.089910 0.225926 0.255556 0.288889 0.270370
4 0.004995 0.407407 0.337037 0.348148 0.303704
8 1 0 0.555556 0.066667 0.125926 0.118519 0.103704
1 0.444444 0.933333 0.874074 0.881481 0.896296
3 0 0.147059 0.037037 0.051852 0.025926 0.044444
1 0.441176 0.125926 0.159259 0.162963 0.155556
2 0.343137 0.355556 0.318519 0.337037 0.362963
3 0.068627 0.481481 0.470370 0.474074 0.437037
5 0 0.029412 0.014815 0.029630 0.018519 0.033333
1 0.196078 0.081481 0.085185 0.081481 0.085185
2 0.392157 0.200000 0.181481 0.218519 0.181481
3 0.294118 0.248148 0.255556 0.200000 0.218519
4 0.081699 0.222222 0.248148 0.288889 0.288889
5 0.006536 0.233333 0.200000 0.192593 0.192593
80 1 1 0 0.987654 0.292593 0.559259 0.725926 0.785185
1 0.012346 0.707407 0.440741 0.274074 0.214815
3 0 0.962963 0.277778 0.555556 0.566667 0.614815
1 0.037037 0.722222 0.444444 0.433333 0.385185
5 0 0.938272 0.281481 0.507407 0.488889 0.514815
1 0.061728 0.718519 0.492593 0.511111 0.485185
4 1 0 0.952381 0.066667 0.144444 0.322222 0.459259
1 0.047619 0.933333 0.855556 0.677778 0.540741
3 0 0.862264 0.040741 0.133333 0.225926 0.251852
1 0.132656 0.133333 0.307407 0.437037 0.325926
2 0.005038 0.181481 0.296296 0.218519 0.385185
3 0.000042 0.644444 0.262963 0.118519 0.037037
5 0 0.778699 0.044444 0.122222 0.155556 0.185185
1 0.204921 0.140741 0.285185 0.307407 0.322222
2 0.015968 0.192593 0.300000 0.244444 0.214815
3 0.000409 0.192593 0.196296 0.259259 0.185185
4 0.000003 0.429630 0.096296 0.033333 0.092593
8 1 0 0.909091 0.003704 0.051852 0.203704 0.292593
1 0.090909 0.996296 0.948148 0.796296 0.707407
3 0 0.748706 0.000000 0.070370 0.092593 0.151852
1 0.230371 0.066667 0.114815 0.351852 0.251852
2 0.020413 0.088889 0.159259 0.259259 0.429630
3 0.000510 0.844444 0.655556 0.296296 0.166667
5 0 0.613645 0.003704 0.066667 0.088889 0.088889
1 0.322971 0.059259 0.140741 0.192593 0.185185
2 0.058722 0.074074 0.181481 0.207407 0.218519
3 0.004517 0.081481 0.196296 0.303704 0.200000
4 0.000143 0.103704 0.166667 0.122222 0.262963
5 0.000001 0.677778 0.248148 0.085185 0.044444

Plot grafik dari tabel di atas. Pada grafik di bawah, warna biru, hijau, merah, cyan, dan ungu 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))


Cukup terlihat dari grafik bahwa pengurangan jumlah fitur secara umum meningkatkan performa metode, terutama jika num_norm atau banyak normal posts besar. Agar lebih jelas, 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.829630 0.090909 0.818519 0.090909 0.818519 0.090909 0.825926
3 0.272727 0.870370 0.272727 0.877778 0.272727 0.907407 0.272727 0.918519
5 0.454545 0.937037 0.454545 0.955556 0.454545 0.937037 0.454545 0.929630
4 1 0.285714 0.825926 0.285714 0.900000 0.285714 0.877778 0.285714 0.855556
3 0.857143 2.137037 0.857143 2.162963 0.857143 2.048148 0.857143 2.037037
5 1.428571 2.874074 1.428571 2.770370 1.428571 2.811111 1.428571 2.681481
8 1 0.444444 0.933333 0.444444 0.874074 0.444444 0.881481 0.444444 0.896296
3 1.333333 2.281481 1.333333 2.207407 1.333333 2.259259 1.333333 2.192593
5 2.222222 3.281481 2.222222 3.207407 2.222222 3.237037 2.222222 3.222222
80 1 1 0.012346 0.707407 0.012346 0.440741 0.012346 0.274074 0.012346 0.214815
3 0.037037 0.722222 0.037037 0.444444 0.037037 0.433333 0.037037 0.385185
5 0.061728 0.718519 0.061728 0.492593 0.061728 0.511111 0.061728 0.485185
4 1 0.047619 0.933333 0.047619 0.855556 0.047619 0.677778 0.047619 0.540741
3 0.142857 2.429630 0.142857 1.688889 0.142857 1.229630 0.142857 1.207407
5 0.238095 2.822222 0.238095 1.859259 0.238095 1.707407 0.238095 1.677778
8 1 0.090909 0.996296 0.090909 0.948148 0.090909 0.796296 0.090909 0.707407
3 0.272727 2.777778 0.272727 2.400000 0.272727 1.759259 0.272727 1.611111
5 0.454545 4.255556 0.454545 3.000000 0.454545 2.433333 0.454545 2.496296

Dari tabel di atas, terlihat sekali bahwa pengurangan jumlah fitur memang meningkatkan performa metode, khususnya untuk banyak posts yang besar. Hal ini berbeda sekali dengan hasil yang didapatkan jika menggunakan distance metric correlation.