Pada notebook ini, akan dianalisis hasil eksperimen dengan memisahkan antara within- dan inter-forums dataset. Sekedar pengingat, metode yang digunakan adalah txt_comp_dist, distance metric correlation, dan iterasi untuk setiap konfigurasi eksperimen sebanyak 30 kali.

Pertama-tama, load 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-rea-feat-corr-dist-within-inter-forums.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
feature kind norm_dir oot_dir
readability within bbs152930 bbs57549 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 0.833333 0.133333 0.033333 0.000000 0.000000 0.000000
mus1139 mus10142 0.909091 0.090909 0.933333 0.066667 0.727273 0.272727 0.800000 0.200000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000
phy17301 phy40008 0.909091 0.090909 0.966667 0.033333 0.727273 0.272727 0.766667 0.233333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.800000 0.166667 0.033333 0.000000 0.000000 0.000000
inter bbs152930 mus10142 0.909091 0.090909 1.000000 0.000000 0.727273 0.272727 0.400000 0.600000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000
phy40008 0.909091 0.090909 0.966667 0.033333 0.727273 0.272727 0.633333 0.366667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.933333 0.066667 0.000000 0.000000 0.000000 0.000000
mus1139 bbs57549 0.909091 0.090909 0.933333 0.066667 0.727273 0.272727 0.900000 0.100000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.733333 0.233333 0.033333 0.000000 0.000000 0.000000
phy40008 0.909091 0.090909 0.966667 0.033333 0.727273 0.272727 0.966667 0.033333 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.766667 0.233333 0.000000 0.000000 0.000000 0.000000
phy17301 bbs57549 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 0.700000 0.300000 0.000000 0.000000 0.000000 0.000000
mus10142 0.909091 0.090909 1.000000 0.000000 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.000000
unigram within bbs152930 bbs57549 0.909091 0.090909 0.600000 0.400000 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.233333 0.766667 0.000000
mus1139 mus10142 0.909091 0.090909 0.900000 0.100000 0.727273 0.272727 0.433333 0.566667 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.433333 0.466667 0.100000 0.000000 0.000000 0.000000
phy17301 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.033333 0.166667 0.300000 0.400000 0.100000 0.000000
inter bbs152930 mus10142 0.909091 0.090909 0.800000 0.200000 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.700000 0.300000
phy40008 0.909091 0.090909 0.400000 0.600000 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.600000 0.400000
mus1139 bbs57549 0.909091 0.090909 0.300000 0.700000 0.727273 0.272727 0.000000 1.000000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.033333 0.266667 0.200000 0.266667 0.133333 0.100000
phy40008 0.909091 0.090909 0.233333 0.766667 0.727273 0.272727 0.000000 1.000000 0.545455 0.454545 ... 0.058722 0.004517 0.000143 0.000001 0.233333 0.400000 0.100000 0.200000 0.066667 0.000000
phy17301 bbs57549 0.909091 0.090909 0.200000 0.800000 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.033333 0.300000 0.666667
mus10142 0.909091 0.090909 0.600000 0.400000 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.133333 0.233333 0.433333 0.200000

18 rows × 116 columns

Lakukan aggregasi untuk melihat performa metode untuk masing-masing kasus (within- dan inter-forum).


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

In [5]:
df_agg


Out[5]:
feature readability unigram
kind inter within inter within
result base perf base perf base perf base perf
num_norm num_oot num_top k
10 1 1 0 0.909091 0.972222 0.909091 0.955556 0.909091 0.422222 0.909091 0.600000
1 0.090909 0.027778 0.090909 0.044444 0.090909 0.577778 0.090909 0.400000
3 0 0.727273 0.694444 0.727273 0.755556 0.727273 0.000000 0.727273 0.155556
1 0.272727 0.305556 0.272727 0.244444 0.272727 1.000000 0.272727 0.844444
5 0 0.545455 0.544444 0.545455 0.555556 0.545455 0.000000 0.545455 0.133333
1 0.454545 0.455556 0.454545 0.444444 0.454545 1.000000 0.454545 0.866667
4 1 0 0.714286 0.938889 0.714286 0.911111 0.714286 0.350000 0.714286 0.377778
1 0.285714 0.061111 0.285714 0.088889 0.285714 0.650000 0.285714 0.622222
3 0 0.329670 0.383333 0.329670 0.344444 0.329670 0.011111 0.329670 0.044444
1 0.494505 0.550000 0.494505 0.588889 0.494505 0.183333 0.494505 0.344444
2 0.164835 0.066667 0.164835 0.066667 0.164835 0.700000 0.164835 0.511111
3 0.010989 0.000000 0.010989 0.000000 0.010989 0.105556 0.010989 0.100000
5 0 0.125874 0.133333 0.125874 0.155556 0.125874 0.000000 0.125874 0.000000
1 0.419580 0.338889 0.419580 0.455556 0.419580 0.038889 0.419580 0.122222
2 0.359640 0.438889 0.359640 0.366667 0.359640 0.133333 0.359640 0.211111
3 0.089910 0.088889 0.089910 0.022222 0.089910 0.577778 0.089910 0.411111
4 0.004995 0.000000 0.004995 0.000000 0.004995 0.250000 0.004995 0.255556
8 1 0 0.555556 0.700000 0.555556 0.733333 0.555556 0.522222 0.555556 0.400000
1 0.444444 0.300000 0.444444 0.266667 0.444444 0.477778 0.444444 0.600000
3 0 0.147059 0.211111 0.147059 0.200000 0.147059 0.011111 0.147059 0.000000
1 0.441176 0.638889 0.441176 0.622222 0.441176 0.255556 0.441176 0.288889
2 0.343137 0.138889 0.343137 0.177778 0.343137 0.605556 0.343137 0.544444
3 0.068627 0.011111 0.068627 0.000000 0.068627 0.127778 0.068627 0.166667
5 0 0.029412 0.038889 0.029412 0.011111 0.029412 0.000000 0.029412 0.000000
1 0.196078 0.238889 0.196078 0.222222 0.196078 0.050000 0.196078 0.100000
2 0.392157 0.455556 0.392157 0.422222 0.392157 0.122222 0.392157 0.155556
3 0.294118 0.244444 0.294118 0.322222 0.294118 0.400000 0.294118 0.344444
4 0.081699 0.022222 0.081699 0.022222 0.081699 0.388889 0.081699 0.388889
5 0.006536 0.000000 0.006536 0.000000 0.006536 0.038889 0.006536 0.011111
80 1 1 0 0.987654 0.994444 0.987654 1.000000 0.987654 0.361111 0.987654 0.766667
1 0.012346 0.005556 0.012346 0.000000 0.012346 0.638889 0.012346 0.233333
3 0 0.962963 0.988889 0.962963 0.988889 0.962963 0.205556 0.962963 0.555556
1 0.037037 0.011111 0.037037 0.011111 0.037037 0.794444 0.037037 0.444444
5 0 0.938272 0.977778 0.938272 1.000000 0.938272 0.205556 0.938272 0.488889
1 0.061728 0.022222 0.061728 0.000000 0.061728 0.794444 0.061728 0.511111
4 1 0 0.952381 0.961111 0.952381 0.988889 0.952381 0.088889 0.952381 0.444444
1 0.047619 0.038889 0.047619 0.011111 0.047619 0.911111 0.047619 0.555556
3 0 0.862264 0.966667 0.862264 0.955556 0.862264 0.044444 0.862264 0.333333
1 0.132656 0.033333 0.132656 0.044444 0.132656 0.194444 0.132656 0.255556
2 0.005038 0.000000 0.005038 0.000000 0.005038 0.372222 0.005038 0.366667
3 0.000042 0.000000 0.000042 0.000000 0.000042 0.388889 0.000042 0.044444
5 0 0.778699 0.894444 0.778699 0.966667 0.778699 0.022222 0.778699 0.277778
1 0.204921 0.105556 0.204921 0.022222 0.204921 0.133333 0.204921 0.222222
2 0.015968 0.000000 0.015968 0.011111 0.015968 0.227778 0.015968 0.188889
3 0.000409 0.000000 0.000409 0.000000 0.000409 0.277778 0.000409 0.255556
4 0.000003 0.000000 0.000003 0.000000 0.000003 0.338889 0.000003 0.055556
8 1 0 0.909091 0.955556 0.909091 0.944444 0.909091 0.133333 0.909091 0.311111
1 0.090909 0.044444 0.090909 0.055556 0.090909 0.866667 0.090909 0.688889
3 0 0.748706 0.911111 0.748706 0.855556 0.748706 0.072222 0.748706 0.111111
1 0.230371 0.083333 0.230371 0.133333 0.230371 0.066667 0.230371 0.255556
2 0.020413 0.005556 0.020413 0.011111 0.020413 0.238889 0.020413 0.511111
3 0.000510 0.000000 0.000510 0.000000 0.000510 0.622222 0.000510 0.122222
5 0 0.613645 0.855556 0.613645 0.877778 0.613645 0.044444 0.613645 0.155556
1 0.322971 0.138889 0.322971 0.100000 0.322971 0.111111 0.322971 0.211111
2 0.058722 0.005556 0.058722 0.022222 0.058722 0.072222 0.058722 0.133333
3 0.004517 0.000000 0.004517 0.000000 0.004517 0.122222 0.004517 0.211111
4 0.000143 0.000000 0.000143 0.000000 0.000143 0.372222 0.000143 0.288889
5 0.000001 0.000000 0.000001 0.000000 0.000001 0.277778 0.000001 0.000000

Buang baseline karena tidak diperlukan (di sini yang akan dibandingkan adalah masing-masing fitur terhadap kasus within- dan inter-forum dataset).


In [6]:
df_agg.drop('base', axis=1, level='result', inplace=True)

In [7]:
df_agg.columns = df_agg.columns.droplevel(level='result')

In [8]:
df_agg


Out[8]:
feature readability unigram
kind inter within inter within
num_norm num_oot num_top k
10 1 1 0 0.972222 0.955556 0.422222 0.600000
1 0.027778 0.044444 0.577778 0.400000
3 0 0.694444 0.755556 0.000000 0.155556
1 0.305556 0.244444 1.000000 0.844444
5 0 0.544444 0.555556 0.000000 0.133333
1 0.455556 0.444444 1.000000 0.866667
4 1 0 0.938889 0.911111 0.350000 0.377778
1 0.061111 0.088889 0.650000 0.622222
3 0 0.383333 0.344444 0.011111 0.044444
1 0.550000 0.588889 0.183333 0.344444
2 0.066667 0.066667 0.700000 0.511111
3 0.000000 0.000000 0.105556 0.100000
5 0 0.133333 0.155556 0.000000 0.000000
1 0.338889 0.455556 0.038889 0.122222
2 0.438889 0.366667 0.133333 0.211111
3 0.088889 0.022222 0.577778 0.411111
4 0.000000 0.000000 0.250000 0.255556
8 1 0 0.700000 0.733333 0.522222 0.400000
1 0.300000 0.266667 0.477778 0.600000
3 0 0.211111 0.200000 0.011111 0.000000
1 0.638889 0.622222 0.255556 0.288889
2 0.138889 0.177778 0.605556 0.544444
3 0.011111 0.000000 0.127778 0.166667
5 0 0.038889 0.011111 0.000000 0.000000
1 0.238889 0.222222 0.050000 0.100000
2 0.455556 0.422222 0.122222 0.155556
3 0.244444 0.322222 0.400000 0.344444
4 0.022222 0.022222 0.388889 0.388889
5 0.000000 0.000000 0.038889 0.011111
80 1 1 0 0.994444 1.000000 0.361111 0.766667
1 0.005556 0.000000 0.638889 0.233333
3 0 0.988889 0.988889 0.205556 0.555556
1 0.011111 0.011111 0.794444 0.444444
5 0 0.977778 1.000000 0.205556 0.488889
1 0.022222 0.000000 0.794444 0.511111
4 1 0 0.961111 0.988889 0.088889 0.444444
1 0.038889 0.011111 0.911111 0.555556
3 0 0.966667 0.955556 0.044444 0.333333
1 0.033333 0.044444 0.194444 0.255556
2 0.000000 0.000000 0.372222 0.366667
3 0.000000 0.000000 0.388889 0.044444
5 0 0.894444 0.966667 0.022222 0.277778
1 0.105556 0.022222 0.133333 0.222222
2 0.000000 0.011111 0.227778 0.188889
3 0.000000 0.000000 0.277778 0.255556
4 0.000000 0.000000 0.338889 0.055556
8 1 0 0.955556 0.944444 0.133333 0.311111
1 0.044444 0.055556 0.866667 0.688889
3 0 0.911111 0.855556 0.072222 0.111111
1 0.083333 0.133333 0.066667 0.255556
2 0.005556 0.011111 0.238889 0.511111
3 0.000000 0.000000 0.622222 0.122222
5 0 0.855556 0.877778 0.044444 0.155556
1 0.138889 0.100000 0.111111 0.211111
2 0.005556 0.022222 0.072222 0.133333
3 0.000000 0.000000 0.122222 0.211111
4 0.000000 0.000000 0.372222 0.288889
5 0.000000 0.000000 0.277778 0.000000

Seperti biasa, akan diplot grafik untuk tabel di atas. Pada grafik di bawah, warna biru, hijau, merah, dan cyan merepresentasikan fitur readability kasus inter, fitur readability kasus within, fitur unigram kasus inter, dan fitur unigram kasus within berturut-turut.


In [9]:
grouped = df_agg.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))


Terlihat dari grafik bahwa secara umum, kasus within-forum memang lebih sulit ketimbang inter-forum, baik untuk fitur readability maupun unigram. Selanjutnya, akan dihitung expected value-nya agar lebih jelas perbandingannya.


In [10]:
ngroup = len(grouped)
data = np.empty((ngroup, 4))
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 [11]:
index = pd.MultiIndex.from_tuples(index, names=['num_norm','num_oot','num_top'])
columns = df_agg.columns.copy()

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

In [13]:
result


Out[13]:
feature readability unigram
kind inter within inter within
num_norm num_oot num_top
10 1 1 0.027778 0.044444 0.577778 0.400000
3 0.305556 0.244444 1.000000 0.844444
5 0.455556 0.444444 1.000000 0.866667
4 1 0.061111 0.088889 0.650000 0.622222
3 0.683333 0.722222 1.900000 1.666667
5 1.483333 1.255556 3.038889 2.800000
8 1 0.300000 0.266667 0.477778 0.600000
3 0.950000 0.977778 1.850000 1.877778
5 1.972222 2.122222 3.244444 3.055556
80 1 1 0.005556 0.000000 0.638889 0.233333
3 0.011111 0.011111 0.794444 0.444444
5 0.022222 0.000000 0.794444 0.511111
4 1 0.038889 0.011111 0.911111 0.555556
3 0.033333 0.044444 2.105556 1.122222
5 0.105556 0.044444 2.777778 1.588889
8 1 0.044444 0.055556 0.866667 0.688889
3 0.094444 0.155556 2.411111 1.644444
5 0.150000 0.144444 3.500000 2.266667

Dari tabel di atas, dapat dilihat bahwa memang benar secara umum kasus within-forum lebih sulit ketimbang inter-forum.