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.
Content source: kemskems/otdet
Similar notebooks: