# hw4 report
###### tags: `AI2023`
---
### 了解資料
#### read data
```python=22
path = 'data/'
df = pd.read_csv(path + 'train.csv')
```
#### features (training set only)
* profile pic:⽤戶有沒有頭貼
```python=30
# check feature 'profile pic'
print(set(df['profile pic'])) # value: 0/1
print(df.loc[(df['profile pic'] == 0) & (df['fake'] == 0)]) # count: 2
print(df.loc[(df['profile pic'] == 0) & (df['fake'] == 1)]) # count: 170
print(df.loc[(df['profile pic'] == 1) & (df['fake'] == 0)]) # count: 286
print(df.loc[(df['profile pic'] == 1) & (df['fake'] == 1)]) # count: 118
```
* value: 0 or 1
| | value = 0 | value = 1 |
| -----------: | :-------: | :-------: |
| **not fake** | 2 | 286 |
| **is fake** | 170 | 118 |
* 大部分沒有頭貼的用戶為假帳號
* nums/length username:帳戶名稱中數字所佔⽐例
```python=37
# check feature 'nums/length username'
lst = list(set(df['nums/length username']))
lst = sorted(lst, key=float)
print(lst)
cnt_n_fake = []
cnt_fake = []
for i in lst:
cnt_n_fake.append(len(df.loc[(df['nums/length username'] == i) & (df['fake'] == 0)]))
cnt_fake.append(len(df.loc[(df['nums/length username'] == i) & (df['fake'] == 1)]))
print(cnt_n_fake, cnt_fake)
lst = [str(i) for i in lst]
plt.figure(figsize=(12, 7))
bar1 = plt.bar(lst, cnt_n_fake)
bar2 = plt.bar(lst, cnt_fake, bottom=cnt_n_fake, color='red')
plt.xticks(rotation = 90)
plt.xlabel('value')
plt.ylabel('count')
plt.legend([bar1, bar2], ['not fake', 'is fake'])
plt.show()
```
* value: floating points 0~1

* 帳戶名稱中數字所佔⽐例越高,是假帳號的比例就越高
* fullname words:⽤戶名稱單詞數
```python=59
# check feature 'fullname words'
lst = list(set(df['fullname words']))
print(lst)
cnt_n_fake = []
cnt_fake = []
for i in lst:
cnt_n_fake.append(len(df.loc[(df['fullname words'] == i) & (df['fake'] == 0)]))
cnt_fake.append(len(df.loc[(df['fullname words'] == i) & (df['fake'] == 1)]))
print(cnt_n_fake, cnt_fake)
lst = [str(i) for i in lst]
bar1 = plt.bar(lst, cnt_n_fake)
bar2 = plt.bar(lst, cnt_fake, bottom=cnt_n_fake, color='red')
plt.xlabel('value')
plt.ylabel('count')
plt.legend([bar1, bar2], ['not fake', 'is fake'])
plt.show()
```
* value: integer

* nums/length fullname:⽤戶名稱中數字所佔⽐例
```python=78
# check feature 'nums/length fullname'
lst = list(set(df['nums/length fullname']))
lst = sorted(lst, key = float)
print(lst)
cnt_n_fake = []
cnt_fake = []
for i in lst:
cnt_n_fake.append(len(df.loc[(df['nums/length fullname'] == i) & (df['fake'] == 0)]))
cnt_fake.append(len(df.loc[(df['nums/length fullname'] == i) & (df['fake'] == 1)]))
print(cnt_n_fake, cnt_fake)
lst = [str(i) for i in lst]
plt.figure(figsize=(12, 7))
bar1 = plt.bar(lst, cnt_n_fake)
bar2 = plt.bar(lst, cnt_fake, bottom=cnt_n_fake, color='red')
plt.xticks(rotation = 90)
plt.xlabel('value')
plt.ylabel('count')
plt.legend([bar1, bar2], ['not fake', 'is fake'])
plt.show()
```
* value: floating points 0~1

* name==username:帳戶名稱與⽤戶名稱是否⼀致
```python=100
# check feature 'name==username'
print(set(df['name==username'])) # value: 0/1
print(df.loc[(df['name==username'] == 0) & (df['fake'] == 0)]) # count: 287
print(df.loc[(df['name==username'] == 0) & (df['fake'] == 1)]) # count: 269
print(df.loc[(df['name==username'] == 1) & (df['fake'] == 0)]) # count: 1
print(df.loc[(df['name==username'] == 1) & (df['fake'] == 1)]) # count: 19
```
* value: 0 or 1
| | value = 0 | value = 1 |
| -----------: | :-------: | :-------: |
| **not fake** | 287 | 1 |
| **is fake** | 269 | 19 |
* description length:⾃介⻑度
```python=107
# check feature 'description length'
lst = list(set(df['description length']))
print(lst)
lst = np.arange(151) # max description length
cnt_n_fake = []
cnt_fake = []
for i in lst:
cnt_n_fake.append(len(df.loc[(df['description length'] == i) & (df['fake'] == 0)]))
cnt_fake.append(len(df.loc[(df['description length'] == i) & (df['fake'] == 1)]))
print(cnt_n_fake, cnt_fake)
plt.figure(figsize=(12, 7))
plt.plot(lst, cnt_n_fake)
plt.plot(lst, cnt_fake, color='red')
plt.xlabel('value')
plt.ylabel('count')
plt.legend(['not fake', 'is fake'])
plt.show()
```
* value: integer

* 假帳號的自介長度大多為 0
* external URL:是否有外部網址
```python=127
# check feature 'external URL'
print(set(df['external URL'])) # value: 0/1
print(df.loc[(df['external URL'] == 0) & (df['fake'] == 0)]) # count: 221
print(df.loc[(df['external URL'] == 0) & (df['fake'] == 1)]) # count: 288
print(df.loc[(df['external URL'] == 1) & (df['fake'] == 0)]) # count: 67
print(df.loc[(df['external URL'] == 1) & (df['fake'] == 1)]) # count: 0
```
* value: 0 or 1
| | value = 0 | value = 1 |
| -----------: | :-------: | :-------: |
| **not fake** | 221 | 67 |
| **is fake** | 288 | 0 |
* 有外部網址的帳號皆不是假帳號
* private:是否為私⼈帳號
```python=134
# check feature 'private'
print(set(df['private'])) # value: 0/1
print(df.loc[(df['private'] == 0) & (df['fake'] == 0)]) # count: 174
print(df.loc[(df['private'] == 0) & (df['fake'] == 1)]) # count: 182
print(df.loc[(df['private'] == 1) & (df['fake'] == 0)]) # count: 114
print(df.loc[(df['private'] == 1) & (df['fake'] == 1)]) # count: 106
```
* value: 0 or 1
| | value = 0 | value = 1 |
| -----------: | :-------: | :-------: |
| **not fake** | 174 | 114 |
| **is fake** | 182 | 106 |
* 是否為私⼈帳號與是否為假帳號直接相關性不大
* #posts:有幾則貼⽂
```python=141
# check feature '#posts'
lst = list(set(df['#posts']))
lst = sorted(lst)
lst = lst[0:146] # the last non-zero value in cnt_fake: index 145
print(lst)
cnt_n_fake = []
cnt_fake = []
for i in lst:
cnt_n_fake.append(len(df.loc[(df['#posts'] == i) & (df['fake'] == 0)]))
cnt_fake.append(len(df.loc[(df['#posts'] == i) & (df['fake'] == 1)]))
print(cnt_n_fake, cnt_fake)
# find the last non-zero value in cnt_fake
# for i, value in enumerate(cnt_fake):
# if value == 1:
# print(i)
plt.figure(figsize=(12, 7))
plt.plot(lst, cnt_n_fake)
plt.plot(lst, cnt_fake, color='red')
plt.xlabel('value')
plt.ylabel('count')
plt.legend(['not fake', 'is fake'])
plt.show()
```
* value: integer

* value > 300 (index > 145 in `lst`) 的皆不是假帳號
* 貼⽂數越多,是假帳號的比例越少
* #followers:粉絲數
```python=167
# check feature '#followers'
lst = list(set(df['#followers']))
lst = sorted(lst)
lst = lst[0:322] # the last non-zero value in cnt_fake: index 321
print(lst)
cnt_n_fake = []
cnt_fake = []
for i in lst:
cnt_n_fake.append(len(df.loc[(df['#followers'] == i) & (df['fake'] == 0)]))
cnt_fake.append(len(df.loc[(df['#followers'] == i) & (df['fake'] == 1)]))
print(cnt_n_fake, cnt_fake)
# find the last non-zero value in cnt_fake
# for i, value in enumerate(cnt_fake):
# if value == 1:
# print(i)
lst = [str(i) for i in lst]
plt.figure(figsize=(20, 7))
bar1 = plt.bar(lst, cnt_n_fake)
bar2 = plt.bar(lst, cnt_fake, bottom=cnt_n_fake, color='red')
plt.xticks(np.arange(0, 360, 20))
plt.yticks(np.arange(0, 20))
plt.xlabel('value')
plt.ylabel('count')
plt.legend([bar1, bar2], ['not fake', 'is fake'])
plt.show()
```
* value: integer

* value > 3500 (index > 321 in `lst`) 的皆不是假帳號
* 粉絲數越多,是假帳號的比例越少
* #follows:追蹤⼈數
```python=196
# check feature '#follows'
lst = list(set(df['#follows']))
lst = sorted(lst)
print(lst)
cnt_n_fake = []
cnt_fake = []
for i in lst:
cnt_n_fake.append(len(df.loc[(df['#follows'] == i) & (df['fake'] == 0)]))
cnt_fake.append(len(df.loc[(df['#follows'] == i) & (df['fake'] == 1)]))
print(cnt_n_fake, cnt_fake)
lst = [str(i) for i in lst]
plt.figure(figsize=(20, 7))
bar1 = plt.bar(lst, cnt_n_fake)
bar2 = plt.bar(lst, cnt_fake, bottom=cnt_n_fake, color='red')
plt.xticks(np.arange(0, 418, 19))
plt.yticks(np.arange(0, 13))
plt.xlabel('value')
plt.ylabel('count')
plt.legend([bar1, bar2], ['not fake', 'is fake'])
plt.show()
```
* value: integer

* 追蹤⼈數越多,是假帳號的比例越少
* fake:是否為假帳號
```python=25
# check feature 'fake'
print(set(df['fake'])) # value: 0/1
print(df.loc[df['fake'] == 0]) # count: 288
print(df.loc[df['fake'] == 1]) # count: 288
```
* value: 0 or 1
* count: 各 288 筆
---
### 前處理
```python=222
import math
# Discretization
# 為具有連續數值的 features 設定邊界
# 邊界數值之設定是根據上個 section 的觀察結果
discret = {
'nums/length username': [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1],
'fullname words': [0, 1, 2, 3, 5, math.inf],
'nums/length fullname': [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1],
'description length': [0, 1, 20, 40, 60, 80, 100, math.inf],
'#posts': [0, 1, 10, 20, 30, 40, 50, 100, 200, 300, math.inf],
'#followers': [0, 20, 40, 60, 80, 100, 150, 200, 300, 500, 1000, math.inf],
'#follows': [0, 20, 40, 60, 80, 100, 150, 200, 300, 500, 1000, math.inf]
}
```
* 為具有連續的數值的 features 設定離散區間的邊界,使之得以轉換成離散型資料
* 邊界數值之設定是根據上個 section 的觀察結果而定
* 數值為 floating points 0~1 的 features,如:'nums/length username' 與 'nums/length fullname',將其區間邊界設定為每 0.1 一個 step
* 數值為 integer 的 features,則根據該 feature 的數值對應是否為假帳號的分布圖(即上個 section 中的折線圖與長條圖),來決定區間邊界數值
---
### 建⽴模型
* 定義一些常數以便利用
```python=240
# constants
p = df.loc[df['fake'] == 1].shape[0]
n = df.loc[df['fake'] == 0].shape[0]
features = [
'profile pic',
'nums/length username',
'fullname words',
'nums/length fullname',
'name==username',
'description length',
'external URL',
'private',
'#posts',
'#followers',
'#follows'
]
```
* 根據定義實作一些 helper functions
```python=257
def entropy(prob):
if prob == 0 or prob == 1: # boundary value
return 0
else:
return -(prob * math.log2(prob) + (1-prob) * math.log2(1-prob))
def remainder(feature):
lst = list(set(df[feature]))
lst = sorted(lst, key=type(lst[0]))
sum = 0
if feature in discret.keys():
for i in range(len(discret[feature])-1):
p_k = df.loc[(df[feature] >= discret[feature][i]) & (df[feature] < discret[feature][i+1]) & (df['fake'] == 1)].shape[0]
n_k = df.loc[(df[feature] >= discret[feature][i]) & (df[feature] < discret[feature][i+1]) & (df['fake'] == 0)].shape[0]
if p_k == 0 and n_k == 0:
continue
sum += (p_k + n_k) / (p + n) * entropy(p_k / (p_k + n_k))
else:
for i in lst:
p_k = df.loc[(df[feature] == i) & (df['fake'] == 1)].shape[0]
n_k = df.loc[(df[feature] == i) & (df['fake'] == 0)].shape[0]
sum += (p_k + n_k) / (p + n) * entropy(p_k / (p_k + n_k))
return sum
def GAIN(feature):
return entropy(p / (p + n)) - remainder(feature)
```
* `entropy(prob)`
* 傳入 0~1 的 probability 數值
* 回傳值即為根據以下公式計算所得的值

* `remainder(feature)`
* 傳入 feature 名稱,則可以計算出該 feature 的 remainder 數值,公式如下

* 因為離散型資料與連續型資料的取值邏輯不同,故分成兩個 cases,但計算的方式都是依照公式定義,即 line 274、line 279
* `GAIN(feature)`
* 傳入 feature 名稱,則可以計算出該 feature 的 information gain 數值,公式如下

* 根據定義實作 decision tree learning 演算法
```python=286
def DT(df, feature, df_parent):
if df.shape[0] == 0:
return 1 if (df_parent.loc[df_parent['fake'] == 1].shape[0] > df_parent.loc[df_parent['fake'] == 1].shape[0]) else 0
elif df.loc[df['fake'] == 1].shape[0] == 0:
return 0
elif df.loc[df['fake'] == 0].shape[0] == 0:
return 1
elif len(feature) == 0:
return 1 if (df.loc[df['fake'] == 1].shape[0] > df.loc[df['fake'] == 1].shape[0]) else 0
else:
gain = []
for i in feature:
gain.append(GAIN(i))
index = gain.index(max(gain))
root = feature[index]
# print(gain, index, root)
tree = { root: {} }
if root in discret.keys():
for i in range(len(discret[root])-1):
df_child = df.loc[(df[root] >= discret[root][i]) & (df[root] < discret[root][i+1])]
subtree = DT(df_child, feature[:index] + feature[index+1:], df)
tree[root][i] = subtree
else:
lst = list(set(df[root]))
lst = sorted(lst, key=type(lst[0]))
for i in lst:
df_child = df.loc[df[root] == i]
subtree = DT(df_child, feature[:index] + feature[index+1:], df)
tree[root][i] = subtree
return tree
```
* 最終生成的 tree 格式為 python dictionary 格式,結構範例如下
```
{
feature1:
{
v_1: { feature2: { ... } },
v_2: { feature4: { ... } },
...,
v_k: { ... }
}
}
```
* build model and store model
```python=319
# build model
tree = DT(df, features, df)
# store model
import json
with open("tree.json", "w") as outfile:
json.dump(tree, outfile)
```
---
### 優化
* 驗證模型
```python=335
# verify model
test = pd.read_csv(path + 'test.csv')
correctness = []
correctness_fake = []
correctness_n_fake = []
for i in range(test.shape[0]):
target = test.iloc[i]
result = tree
while not (result == 0 or result == 1):
feature = list(result.keys())[0]
if feature in discret.keys():
for i in range(len(discret[feature])-1):
if discret[feature][i] <= target[feature] and target[feature] < discret[feature][i+1]:
result = result[feature][str(i)]
break
else:
lst = list(set(df[feature]))
lst = sorted(lst, key=type(lst[0]))
for i in lst:
if target[feature] == i:
try:
result = result[feature][str(i)]
except:
result = 1
correctness.append(target['fake'] == result)
if target['fake'] == 1:
correctness_fake.append(target['fake'] == result)
else:
correctness_n_fake.append(target['fake'] == result)
print('accuracy: {}'.format(correctness.count(True) / len(correctness)))
print('accuracy_fake: {}'.format(correctness_fake.count(True) / len(correctness_fake)))
print('accuracy_n_fake: {}'.format(correctness_n_fake.count(True) / len(correctness_n_fake)))
```
* accuracy = 0.759, accuracy_fake = 0.567, accuracy_n_fake = 0.95
* 根據觀察可以發現模型有 overfitting 的問題,例如:line 353~357 是為了處理在 overfitting to training set 的模型中無法判斷的 test case
* 嘗試 1:可以透過剪去較長的分枝,將決策規則變得更完整,同時減少 overfitting 的問題
* accuracy = 0.775, accuracy_fake = 0.583, accuracy_n_fake = 0.967
* 準確度有微幅上升,但對於假帳號的辨別能力仍然不足
* 嘗試 2:調整資料離散化的區間,重新訓練模型
* 將離散化的區間擴大,以避免細分成太多不必要分支(以下為調整後的區間,在前處理的 section 呈現的是調整前的區間)
```python=227
discret = {
'nums/length username': [0, 0.1, 0.2, 0.3, 0.4, 0.5, 1],
'fullname words': [0, 1, 3, 5, math.inf],
'nums/length fullname': [0, 0.1, 0.2, 0.3, 0.4, 0.5, 1],
'description length': [0, 1, 50, 100, math.inf],
'#posts': [0, 1, 10, 30, 50, 100, 200, 300, math.inf],
'#followers': [0, 100, 300, 500, 1000, math.inf],
'#follows': [0, 100, 300, 500, 1000, math.inf]
}
```
* accuracy = 0.858, accuracy_fake = 0.783, accuracy_n_fake = 0.933
---
### 解釋
* 視覺化決策樹
```python=372
# visualize the tree
from treelib import Node, Tree
import os
root = Tree()
def print_tree(label, t):
if t == 0 or t == 1:
root.create_node(t, parent=label)
return
feature = list(t.keys())[0]
if feature in discret.keys():
for i in range(len(discret[feature])-1):
name = '{} <= {} < {}'.format(discret[feature][i], feature, discret[feature][i+1])
root.create_node(name, label + name, parent=label)
print_tree(label + name, t[feature][str(i)])
else:
lst = list(set(df[feature]))
lst = sorted(lst, key=type(lst[0]))
for i in lst:
if not str(i) in t[feature].keys():
continue
name = '{} = {}'.format(feature, i)
root.create_node(name, label + name, parent=label)
print_tree(label + name, t[feature][str(i)])
root.create_node('Root', 'root')
print_tree('root', tree)
root.show()
# store visualized tree
if os.path.exists('tree.txt'):
os.remove('tree.txt')
root.save2file('tree.txt')
```
* 如同 section 1 的分析,主要判斷是否為假帳號的依據為自介長度、追蹤⼈數、粉絲數、貼⽂數等特徵
* 樹狀圖
```
Root
├── 0 <= #posts < 1
│ ├── 0 <= #followers < 100
│ │ ├── profile pic = 0
│ │ │ └── 1
│ │ └── profile pic = 1
│ │ ├── 0 <= nums/length username < 0.1
│ │ │ ├── 0 <= description length < 1
│ │ │ │ ├── 0 <= #follows < 100
│ │ │ │ │ └── external URL = 0
│ │ │ │ │ ├── 0 <= nums/length fullname < 0.1
│ │ │ │ │ │ ├── name==username = 0
│ │ │ │ │ │ │ ├── 0 <= fullname words < 1
│ │ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ │ ├── 1 <= fullname words < 3
│ │ │ │ │ │ │ │ ├── private = 0
│ │ │ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ │ │ └── private = 1
│ │ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ │ ├── 3 <= fullname words < 5
│ │ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ │ └── 5 <= fullname words < inf
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ └── name==username = 1
│ │ │ │ │ │ └── 1
│ │ │ │ │ ├── 0.1 <= nums/length fullname < 0.2
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.2 <= nums/length fullname < 0.3
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.3 <= nums/length fullname < 0.4
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.4 <= nums/length fullname < 0.5
│ │ │ │ │ │ └── 0
│ │ │ │ │ └── 0.5 <= nums/length fullname < 1
│ │ │ │ │ └── 0
│ │ │ │ ├── 100 <= #follows < 300
│ │ │ │ │ └── 1
│ │ │ │ ├── 1000 <= #follows < inf
│ │ │ │ │ └── 0
│ │ │ │ ├── 300 <= #follows < 500
│ │ │ │ │ └── 0
│ │ │ │ └── 500 <= #follows < 1000
│ │ │ │ └── 0
│ │ │ ├── 1 <= description length < 50
│ │ │ │ └── 1
│ │ │ ├── 100 <= description length < inf
│ │ │ │ └── 0
│ │ │ └── 50 <= description length < 100
│ │ │ └── 0
│ │ ├── 0.1 <= nums/length username < 0.2
│ │ │ └── 1
│ │ ├── 0.2 <= nums/length username < 0.3
│ │ │ └── 1
│ │ ├── 0.3 <= nums/length username < 0.4
│ │ │ └── 1
│ │ ├── 0.4 <= nums/length username < 0.5
│ │ │ └── 1
│ │ └── 0.5 <= nums/length username < 1
│ │ └── 1
│ ├── 100 <= #followers < 300
│ │ ├── profile pic = 0
│ │ │ └── 1
│ │ └── profile pic = 1
│ │ └── 0
│ ├── 1000 <= #followers < inf
│ │ └── 1
│ ├── 300 <= #followers < 500
│ │ └── 1
│ └── 500 <= #followers < 1000
│ └── 0
├── 1 <= #posts < 10
│ ├── 0 <= #followers < 100
│ │ ├── profile pic = 0
│ │ │ └── 1
│ │ └── profile pic = 1
│ │ ├── 0 <= nums/length username < 0.1
│ │ │ ├── 0 <= description length < 1
│ │ │ │ ├── 0 <= #follows < 100
│ │ │ │ │ └── external URL = 0
│ │ │ │ │ ├── 0 <= nums/length fullname < 0.1
│ │ │ │ │ │ ├── name==username = 0
│ │ │ │ │ │ │ ├── 0 <= fullname words < 1
│ │ │ │ │ │ │ │ └── 1
│ │ │ │ │ │ │ ├── 1 <= fullname words < 3
│ │ │ │ │ │ │ │ ├── private = 0
│ │ │ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ │ │ └── private = 1
│ │ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ │ ├── 3 <= fullname words < 5
│ │ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ │ └── 5 <= fullname words < inf
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ └── name==username = 1
│ │ │ │ │ │ └── 1
│ │ │ │ │ ├── 0.1 <= nums/length fullname < 0.2
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.2 <= nums/length fullname < 0.3
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.3 <= nums/length fullname < 0.4
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.4 <= nums/length fullname < 0.5
│ │ │ │ │ │ └── 0
│ │ │ │ │ └── 0.5 <= nums/length fullname < 1
│ │ │ │ │ └── 0
│ │ │ │ ├── 100 <= #follows < 300
│ │ │ │ │ └── external URL = 0
│ │ │ │ │ ├── 0 <= nums/length fullname < 0.1
│ │ │ │ │ │ └── name==username = 0
│ │ │ │ │ │ ├── 0 <= fullname words < 1
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ ├── 1 <= fullname words < 3
│ │ │ │ │ │ │ ├── private = 0
│ │ │ │ │ │ │ │ └── 1
│ │ │ │ │ │ │ └── private = 1
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ ├── 3 <= fullname words < 5
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ └── 5 <= fullname words < inf
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.1 <= nums/length fullname < 0.2
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.2 <= nums/length fullname < 0.3
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.3 <= nums/length fullname < 0.4
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.4 <= nums/length fullname < 0.5
│ │ │ │ │ │ └── 0
│ │ │ │ │ └── 0.5 <= nums/length fullname < 1
│ │ │ │ │ └── 0
│ │ │ │ ├── 1000 <= #follows < inf
│ │ │ │ │ └── 0
│ │ │ │ ├── 300 <= #follows < 500
│ │ │ │ │ └── 0
│ │ │ │ └── 500 <= #follows < 1000
│ │ │ │ └── 0
│ │ │ ├── 1 <= description length < 50
│ │ │ │ ├── 0 <= #follows < 100
│ │ │ │ │ └── external URL = 0
│ │ │ │ │ ├── 0 <= nums/length fullname < 0.1
│ │ │ │ │ │ └── name==username = 0
│ │ │ │ │ │ ├── 0 <= fullname words < 1
│ │ │ │ │ │ │ └── 1
│ │ │ │ │ │ ├── 1 <= fullname words < 3
│ │ │ │ │ │ │ ├── private = 0
│ │ │ │ │ │ │ │ └── 1
│ │ │ │ │ │ │ └── private = 1
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ ├── 3 <= fullname words < 5
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ └── 5 <= fullname words < inf
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.1 <= nums/length fullname < 0.2
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.2 <= nums/length fullname < 0.3
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.3 <= nums/length fullname < 0.4
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.4 <= nums/length fullname < 0.5
│ │ │ │ │ │ └── 0
│ │ │ │ │ └── 0.5 <= nums/length fullname < 1
│ │ │ │ │ └── 0
│ │ │ │ ├── 100 <= #follows < 300
│ │ │ │ │ └── external URL = 0
│ │ │ │ │ ├── 0 <= nums/length fullname < 0.1
│ │ │ │ │ │ └── name==username = 0
│ │ │ │ │ │ ├── 0 <= fullname words < 1
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ ├── 1 <= fullname words < 3
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ ├── 3 <= fullname words < 5
│ │ │ │ │ │ │ └── 1
│ │ │ │ │ │ └── 5 <= fullname words < inf
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.1 <= nums/length fullname < 0.2
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.2 <= nums/length fullname < 0.3
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.3 <= nums/length fullname < 0.4
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.4 <= nums/length fullname < 0.5
│ │ │ │ │ │ └── 0
│ │ │ │ │ └── 0.5 <= nums/length fullname < 1
│ │ │ │ │ └── 0
│ │ │ │ ├── 1000 <= #follows < inf
│ │ │ │ │ └── 0
│ │ │ │ ├── 300 <= #follows < 500
│ │ │ │ │ └── 0
│ │ │ │ └── 500 <= #follows < 1000
│ │ │ │ └── 0
│ │ │ ├── 100 <= description length < inf
│ │ │ │ └── 0
│ │ │ └── 50 <= description length < 100
│ │ │ └── 0
│ │ ├── 0.1 <= nums/length username < 0.2
│ │ │ ├── 0 <= description length < 1
│ │ │ │ ├── 0 <= #follows < 100
│ │ │ │ │ └── external URL = 0
│ │ │ │ │ ├── 0 <= nums/length fullname < 0.1
│ │ │ │ │ │ └── name==username = 0
│ │ │ │ │ │ ├── 0 <= fullname words < 1
│ │ │ │ │ │ │ └── 1
│ │ │ │ │ │ ├── 1 <= fullname words < 3
│ │ │ │ │ │ │ ├── private = 0
│ │ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ │ └── private = 1
│ │ │ │ │ │ │ └── 1
│ │ │ │ │ │ ├── 3 <= fullname words < 5
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ └── 5 <= fullname words < inf
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.1 <= nums/length fullname < 0.2
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.2 <= nums/length fullname < 0.3
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.3 <= nums/length fullname < 0.4
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.4 <= nums/length fullname < 0.5
│ │ │ │ │ │ └── 0
│ │ │ │ │ └── 0.5 <= nums/length fullname < 1
│ │ │ │ │ └── 0
│ │ │ │ ├── 100 <= #follows < 300
│ │ │ │ │ └── external URL = 0
│ │ │ │ │ ├── 0 <= nums/length fullname < 0.1
│ │ │ │ │ │ └── name==username = 0
│ │ │ │ │ │ ├── 0 <= fullname words < 1
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ ├── 1 <= fullname words < 3
│ │ │ │ │ │ │ └── private = 1
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ ├── 3 <= fullname words < 5
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ └── 5 <= fullname words < inf
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.1 <= nums/length fullname < 0.2
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.2 <= nums/length fullname < 0.3
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.3 <= nums/length fullname < 0.4
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.4 <= nums/length fullname < 0.5
│ │ │ │ │ │ └── 0
│ │ │ │ │ └── 0.5 <= nums/length fullname < 1
│ │ │ │ │ └── 0
│ │ │ │ ├── 1000 <= #follows < inf
│ │ │ │ │ └── 0
│ │ │ │ ├── 300 <= #follows < 500
│ │ │ │ │ └── 0
│ │ │ │ └── 500 <= #follows < 1000
│ │ │ │ └── 0
│ │ │ ├── 1 <= description length < 50
│ │ │ │ └── 1
│ │ │ ├── 100 <= description length < inf
│ │ │ │ └── 0
│ │ │ └── 50 <= description length < 100
│ │ │ └── 1
│ │ ├── 0.2 <= nums/length username < 0.3
│ │ │ └── 1
│ │ ├── 0.3 <= nums/length username < 0.4
│ │ │ ├── 0 <= description length < 1
│ │ │ │ ├── 0 <= #follows < 100
│ │ │ │ │ └── 1
│ │ │ │ ├── 100 <= #follows < 300
│ │ │ │ │ └── 0
│ │ │ │ ├── 1000 <= #follows < inf
│ │ │ │ │ └── 0
│ │ │ │ ├── 300 <= #follows < 500
│ │ │ │ │ └── 0
│ │ │ │ └── 500 <= #follows < 1000
│ │ │ │ └── 0
│ │ │ ├── 1 <= description length < 50
│ │ │ │ └── 1
│ │ │ ├── 100 <= description length < inf
│ │ │ │ └── 0
│ │ │ └── 50 <= description length < 100
│ │ │ └── 0
│ │ ├── 0.4 <= nums/length username < 0.5
│ │ │ └── 1
│ │ └── 0.5 <= nums/length username < 1
│ │ └── 1
│ ├── 100 <= #followers < 300
│ │ ├── profile pic = 0
│ │ │ └── 1
│ │ └── profile pic = 1
│ │ ├── 0 <= nums/length username < 0.1
│ │ │ └── 0
│ │ ├── 0.1 <= nums/length username < 0.2
│ │ │ ├── 0 <= description length < 1
│ │ │ │ ├── 0 <= #follows < 100
│ │ │ │ │ └── 0
│ │ │ │ ├── 100 <= #follows < 300
│ │ │ │ │ └── 1
│ │ │ │ ├── 1000 <= #follows < inf
│ │ │ │ │ └── 0
│ │ │ │ ├── 300 <= #follows < 500
│ │ │ │ │ └── 0
│ │ │ │ └── 500 <= #follows < 1000
│ │ │ │ └── 0
│ │ │ ├── 1 <= description length < 50
│ │ │ │ └── 0
│ │ │ ├── 100 <= description length < inf
│ │ │ │ └── 0
│ │ │ └── 50 <= description length < 100
│ │ │ └── 0
│ │ ├── 0.2 <= nums/length username < 0.3
│ │ │ ├── 0 <= description length < 1
│ │ │ │ ├── 0 <= #follows < 100
│ │ │ │ │ └── 0
│ │ │ │ ├── 100 <= #follows < 300
│ │ │ │ │ └── 0
│ │ │ │ ├── 1000 <= #follows < inf
│ │ │ │ │ └── 0
│ │ │ │ ├── 300 <= #follows < 500
│ │ │ │ │ └── external URL = 0
│ │ │ │ │ ├── 0 <= nums/length fullname < 0.1
│ │ │ │ │ │ └── name==username = 0
│ │ │ │ │ │ ├── 0 <= fullname words < 1
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ ├── 1 <= fullname words < 3
│ │ │ │ │ │ │ ├── private = 0
│ │ │ │ │ │ │ │ └── 1
│ │ │ │ │ │ │ └── private = 1
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ ├── 3 <= fullname words < 5
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ └── 5 <= fullname words < inf
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.1 <= nums/length fullname < 0.2
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.2 <= nums/length fullname < 0.3
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.3 <= nums/length fullname < 0.4
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.4 <= nums/length fullname < 0.5
│ │ │ │ │ │ └── 0
│ │ │ │ │ └── 0.5 <= nums/length fullname < 1
│ │ │ │ │ └── 0
│ │ │ │ └── 500 <= #follows < 1000
│ │ │ │ └── 0
│ │ │ ├── 1 <= description length < 50
│ │ │ │ └── 1
│ │ │ ├── 100 <= description length < inf
│ │ │ │ └── 0
│ │ │ └── 50 <= description length < 100
│ │ │ └── 0
│ │ ├── 0.3 <= nums/length username < 0.4
│ │ │ ├── 0 <= description length < 1
│ │ │ │ └── 1
│ │ │ ├── 1 <= description length < 50
│ │ │ │ └── 0
│ │ │ ├── 100 <= description length < inf
│ │ │ │ └── 0
│ │ │ └── 50 <= description length < 100
│ │ │ └── 0
│ │ ├── 0.4 <= nums/length username < 0.5
│ │ │ └── 1
│ │ └── 0.5 <= nums/length username < 1
│ │ └── 1
│ ├── 1000 <= #followers < inf
│ │ └── profile pic = 1
│ │ ├── 0 <= nums/length username < 0.1
│ │ │ └── 0
│ │ ├── 0.1 <= nums/length username < 0.2
│ │ │ └── 0
│ │ ├── 0.2 <= nums/length username < 0.3
│ │ │ ├── 0 <= description length < 1
│ │ │ │ └── 0
│ │ │ ├── 1 <= description length < 50
│ │ │ │ └── 1
│ │ │ ├── 100 <= description length < inf
│ │ │ │ └── 0
│ │ │ └── 50 <= description length < 100
│ │ │ └── 0
│ │ ├── 0.3 <= nums/length username < 0.4
│ │ │ └── 0
│ │ ├── 0.4 <= nums/length username < 0.5
│ │ │ └── 0
│ │ └── 0.5 <= nums/length username < 1
│ │ └── 0
│ ├── 300 <= #followers < 500
│ │ ├── profile pic = 0
│ │ │ └── 1
│ │ └── profile pic = 1
│ │ ├── 0 <= nums/length username < 0.1
│ │ │ ├── 0 <= description length < 1
│ │ │ │ ├── 0 <= #follows < 100
│ │ │ │ │ └── 0
│ │ │ │ ├── 100 <= #follows < 300
│ │ │ │ │ └── 0
│ │ │ │ ├── 1000 <= #follows < inf
│ │ │ │ │ └── 0
│ │ │ │ ├── 300 <= #follows < 500
│ │ │ │ │ └── 0
│ │ │ │ └── 500 <= #follows < 1000
│ │ │ │ └── 1
│ │ │ ├── 1 <= description length < 50
│ │ │ │ └── 0
│ │ │ ├── 100 <= description length < inf
│ │ │ │ └── 0
│ │ │ └── 50 <= description length < 100
│ │ │ └── 0
│ │ ├── 0.1 <= nums/length username < 0.2
│ │ │ └── 0
│ │ ├── 0.2 <= nums/length username < 0.3
│ │ │ └── 0
│ │ ├── 0.3 <= nums/length username < 0.4
│ │ │ └── 0
│ │ ├── 0.4 <= nums/length username < 0.5
│ │ │ └── 0
│ │ └── 0.5 <= nums/length username < 1
│ │ └── 0
│ └── 500 <= #followers < 1000
│ ├── profile pic = 0
│ │ └── 1
│ └── profile pic = 1
│ ├── 0 <= nums/length username < 0.1
│ │ └── 0
│ ├── 0.1 <= nums/length username < 0.2
│ │ └── 0
│ ├── 0.2 <= nums/length username < 0.3
│ │ └── 1
│ ├── 0.3 <= nums/length username < 0.4
│ │ ├── 0 <= description length < 1
│ │ │ └── 0
│ │ ├── 1 <= description length < 50
│ │ │ └── 0
│ │ ├── 100 <= description length < inf
│ │ │ └── 0
│ │ └── 50 <= description length < 100
│ │ └── 1
│ ├── 0.4 <= nums/length username < 0.5
│ │ └── 0
│ └── 0.5 <= nums/length username < 1
│ └── 0
├── 10 <= #posts < 30
│ ├── 0 <= #followers < 100
│ │ ├── profile pic = 0
│ │ │ └── 1
│ │ └── profile pic = 1
│ │ ├── 0 <= nums/length username < 0.1
│ │ │ ├── 0 <= description length < 1
│ │ │ │ ├── 0 <= #follows < 100
│ │ │ │ │ └── external URL = 0
│ │ │ │ │ ├── 0 <= nums/length fullname < 0.1
│ │ │ │ │ │ └── name==username = 0
│ │ │ │ │ │ ├── 0 <= fullname words < 1
│ │ │ │ │ │ │ └── private = 1
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ ├── 1 <= fullname words < 3
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ ├── 3 <= fullname words < 5
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ └── 5 <= fullname words < inf
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.1 <= nums/length fullname < 0.2
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.2 <= nums/length fullname < 0.3
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.3 <= nums/length fullname < 0.4
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.4 <= nums/length fullname < 0.5
│ │ │ │ │ │ └── 0
│ │ │ │ │ └── 0.5 <= nums/length fullname < 1
│ │ │ │ │ └── 0
│ │ │ │ ├── 100 <= #follows < 300
│ │ │ │ │ └── 0
│ │ │ │ ├── 1000 <= #follows < inf
│ │ │ │ │ └── 0
│ │ │ │ ├── 300 <= #follows < 500
│ │ │ │ │ └── 0
│ │ │ │ └── 500 <= #follows < 1000
│ │ │ │ └── 0
│ │ │ ├── 1 <= description length < 50
│ │ │ │ ├── 0 <= #follows < 100
│ │ │ │ │ └── external URL = 0
│ │ │ │ │ ├── 0 <= nums/length fullname < 0.1
│ │ │ │ │ │ └── name==username = 0
│ │ │ │ │ │ ├── 0 <= fullname words < 1
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ ├── 1 <= fullname words < 3
│ │ │ │ │ │ │ └── private = 1
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ ├── 3 <= fullname words < 5
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ └── 5 <= fullname words < inf
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.1 <= nums/length fullname < 0.2
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.2 <= nums/length fullname < 0.3
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.3 <= nums/length fullname < 0.4
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.4 <= nums/length fullname < 0.5
│ │ │ │ │ │ └── 0
│ │ │ │ │ └── 0.5 <= nums/length fullname < 1
│ │ │ │ │ └── 0
│ │ │ │ ├── 100 <= #follows < 300
│ │ │ │ │ └── 0
│ │ │ │ ├── 1000 <= #follows < inf
│ │ │ │ │ └── 0
│ │ │ │ ├── 300 <= #follows < 500
│ │ │ │ │ └── 0
│ │ │ │ └── 500 <= #follows < 1000
│ │ │ │ └── 0
│ │ │ ├── 100 <= description length < inf
│ │ │ │ └── 0
│ │ │ └── 50 <= description length < 100
│ │ │ └── 0
│ │ ├── 0.1 <= nums/length username < 0.2
│ │ │ ├── 0 <= description length < 1
│ │ │ │ ├── 0 <= #follows < 100
│ │ │ │ │ └── 1
│ │ │ │ ├── 100 <= #follows < 300
│ │ │ │ │ └── 0
│ │ │ │ ├── 1000 <= #follows < inf
│ │ │ │ │ └── 0
│ │ │ │ ├── 300 <= #follows < 500
│ │ │ │ │ └── 0
│ │ │ │ └── 500 <= #follows < 1000
│ │ │ │ └── 0
│ │ │ ├── 1 <= description length < 50
│ │ │ │ └── 0
│ │ │ ├── 100 <= description length < inf
│ │ │ │ └── 0
│ │ │ └── 50 <= description length < 100
│ │ │ └── 0
│ │ ├── 0.2 <= nums/length username < 0.3
│ │ │ └── 1
│ │ ├── 0.3 <= nums/length username < 0.4
│ │ │ └── 1
│ │ ├── 0.4 <= nums/length username < 0.5
│ │ │ └── 0
│ │ └── 0.5 <= nums/length username < 1
│ │ └── 1
│ ├── 100 <= #followers < 300
│ │ ├── profile pic = 0
│ │ │ ├── 0 <= nums/length username < 0.1
│ │ │ │ ├── 0 <= description length < 1
│ │ │ │ │ └── 1
│ │ │ │ ├── 1 <= description length < 50
│ │ │ │ │ └── 0
│ │ │ │ ├── 100 <= description length < inf
│ │ │ │ │ └── 0
│ │ │ │ └── 50 <= description length < 100
│ │ │ │ └── 0
│ │ │ ├── 0.1 <= nums/length username < 0.2
│ │ │ │ └── 0
│ │ │ ├── 0.2 <= nums/length username < 0.3
│ │ │ │ └── 0
│ │ │ ├── 0.3 <= nums/length username < 0.4
│ │ │ │ └── 1
│ │ │ ├── 0.4 <= nums/length username < 0.5
│ │ │ │ └── 0
│ │ │ └── 0.5 <= nums/length username < 1
│ │ │ └── 0
│ │ └── profile pic = 1
│ │ ├── 0 <= nums/length username < 0.1
│ │ │ ├── 0 <= description length < 1
│ │ │ │ ├── 0 <= #follows < 100
│ │ │ │ │ └── 0
│ │ │ │ ├── 100 <= #follows < 300
│ │ │ │ │ └── 0
│ │ │ │ ├── 1000 <= #follows < inf
│ │ │ │ │ └── 0
│ │ │ │ ├── 300 <= #follows < 500
│ │ │ │ │ └── external URL = 0
│ │ │ │ │ ├── 0 <= nums/length fullname < 0.1
│ │ │ │ │ │ └── name==username = 0
│ │ │ │ │ │ ├── 0 <= fullname words < 1
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ ├── 1 <= fullname words < 3
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ ├── 3 <= fullname words < 5
│ │ │ │ │ │ │ └── 1
│ │ │ │ │ │ └── 5 <= fullname words < inf
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.1 <= nums/length fullname < 0.2
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.2 <= nums/length fullname < 0.3
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.3 <= nums/length fullname < 0.4
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.4 <= nums/length fullname < 0.5
│ │ │ │ │ │ └── 0
│ │ │ │ │ └── 0.5 <= nums/length fullname < 1
│ │ │ │ │ └── 0
│ │ │ │ └── 500 <= #follows < 1000
│ │ │ │ └── 1
│ │ │ ├── 1 <= description length < 50
│ │ │ │ └── 0
│ │ │ ├── 100 <= description length < inf
│ │ │ │ └── 0
│ │ │ └── 50 <= description length < 100
│ │ │ └── 0
│ │ ├── 0.1 <= nums/length username < 0.2
│ │ │ └── 0
│ │ ├── 0.2 <= nums/length username < 0.3
│ │ │ └── 0
│ │ ├── 0.3 <= nums/length username < 0.4
│ │ │ ├── 0 <= description length < 1
│ │ │ │ ├── 0 <= #follows < 100
│ │ │ │ │ └── 0
│ │ │ │ ├── 100 <= #follows < 300
│ │ │ │ │ └── 0
│ │ │ │ ├── 1000 <= #follows < inf
│ │ │ │ │ └── 0
│ │ │ │ ├── 300 <= #follows < 500
│ │ │ │ │ └── external URL = 0
│ │ │ │ │ ├── 0 <= nums/length fullname < 0.1
│ │ │ │ │ │ └── name==username = 0
│ │ │ │ │ │ ├── 0 <= fullname words < 1
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ ├── 1 <= fullname words < 3
│ │ │ │ │ │ │ └── 1
│ │ │ │ │ │ ├── 3 <= fullname words < 5
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ └── 5 <= fullname words < inf
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.1 <= nums/length fullname < 0.2
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.2 <= nums/length fullname < 0.3
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.3 <= nums/length fullname < 0.4
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.4 <= nums/length fullname < 0.5
│ │ │ │ │ │ └── 0
│ │ │ │ │ └── 0.5 <= nums/length fullname < 1
│ │ │ │ │ └── 0
│ │ │ │ └── 500 <= #follows < 1000
│ │ │ │ └── 0
│ │ │ ├── 1 <= description length < 50
│ │ │ │ └── 0
│ │ │ ├── 100 <= description length < inf
│ │ │ │ └── 0
│ │ │ └── 50 <= description length < 100
│ │ │ └── 0
│ │ ├── 0.4 <= nums/length username < 0.5
│ │ │ └── 1
│ │ └── 0.5 <= nums/length username < 1
│ │ └── 1
│ ├── 1000 <= #followers < inf
│ │ └── profile pic = 1
│ │ ├── 0 <= nums/length username < 0.1
│ │ │ └── 1
│ │ ├── 0.1 <= nums/length username < 0.2
│ │ │ └── 0
│ │ ├── 0.2 <= nums/length username < 0.3
│ │ │ └── 0
│ │ ├── 0.3 <= nums/length username < 0.4
│ │ │ └── 0
│ │ ├── 0.4 <= nums/length username < 0.5
│ │ │ └── 0
│ │ └── 0.5 <= nums/length username < 1
│ │ └── 0
│ ├── 300 <= #followers < 500
│ │ └── profile pic = 1
│ │ ├── 0 <= nums/length username < 0.1
│ │ │ ├── 0 <= description length < 1
│ │ │ │ └── 0
│ │ │ ├── 1 <= description length < 50
│ │ │ │ └── 0
│ │ │ ├── 100 <= description length < inf
│ │ │ │ └── 1
│ │ │ └── 50 <= description length < 100
│ │ │ └── 0
│ │ ├── 0.1 <= nums/length username < 0.2
│ │ │ └── 0
│ │ ├── 0.2 <= nums/length username < 0.3
│ │ │ └── 1
│ │ ├── 0.3 <= nums/length username < 0.4
│ │ │ └── 1
│ │ ├── 0.4 <= nums/length username < 0.5
│ │ │ └── 0
│ │ └── 0.5 <= nums/length username < 1
│ │ └── 1
│ └── 500 <= #followers < 1000
│ └── profile pic = 1
│ ├── 0 <= nums/length username < 0.1
│ │ ├── 0 <= description length < 1
│ │ │ ├── 0 <= #follows < 100
│ │ │ │ └── 0
│ │ │ ├── 100 <= #follows < 300
│ │ │ │ └── 0
│ │ │ ├── 1000 <= #follows < inf
│ │ │ │ └── external URL = 0
│ │ │ │ ├── 0 <= nums/length fullname < 0.1
│ │ │ │ │ └── name==username = 0
│ │ │ │ │ ├── 0 <= fullname words < 1
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 1 <= fullname words < 3
│ │ │ │ │ │ └── private = 0
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 3 <= fullname words < 5
│ │ │ │ │ │ └── 0
│ │ │ │ │ └── 5 <= fullname words < inf
│ │ │ │ │ └── 0
│ │ │ │ ├── 0.1 <= nums/length fullname < 0.2
│ │ │ │ │ └── 0
│ │ │ │ ├── 0.2 <= nums/length fullname < 0.3
│ │ │ │ │ └── 0
│ │ │ │ ├── 0.3 <= nums/length fullname < 0.4
│ │ │ │ │ └── 0
│ │ │ │ ├── 0.4 <= nums/length fullname < 0.5
│ │ │ │ │ └── 0
│ │ │ │ └── 0.5 <= nums/length fullname < 1
│ │ │ │ └── 0
│ │ │ ├── 300 <= #follows < 500
│ │ │ │ └── 0
│ │ │ └── 500 <= #follows < 1000
│ │ │ └── 0
│ │ ├── 1 <= description length < 50
│ │ │ └── 0
│ │ ├── 100 <= description length < inf
│ │ │ └── 0
│ │ └── 50 <= description length < 100
│ │ └── 0
│ ├── 0.1 <= nums/length username < 0.2
│ │ └── 0
│ ├── 0.2 <= nums/length username < 0.3
│ │ └── 0
│ ├── 0.3 <= nums/length username < 0.4
│ │ └── 0
│ ├── 0.4 <= nums/length username < 0.5
│ │ └── 0
│ └── 0.5 <= nums/length username < 1
│ └── 0
├── 100 <= #posts < 200
│ ├── 0 <= #followers < 100
│ │ ├── profile pic = 0
│ │ │ └── 1
│ │ └── profile pic = 1
│ │ ├── 0 <= nums/length username < 0.1
│ │ │ └── 0
│ │ ├── 0.1 <= nums/length username < 0.2
│ │ │ └── 0
│ │ ├── 0.2 <= nums/length username < 0.3
│ │ │ └── 1
│ │ ├── 0.3 <= nums/length username < 0.4
│ │ │ └── 0
│ │ ├── 0.4 <= nums/length username < 0.5
│ │ │ └── 0
│ │ └── 0.5 <= nums/length username < 1
│ │ └── 1
│ ├── 100 <= #followers < 300
│ │ └── profile pic = 1
│ │ ├── 0 <= nums/length username < 0.1
│ │ │ ├── 0 <= description length < 1
│ │ │ │ ├── 0 <= #follows < 100
│ │ │ │ │ └── 0
│ │ │ │ ├── 100 <= #follows < 300
│ │ │ │ │ └── 0
│ │ │ │ ├── 1000 <= #follows < inf
│ │ │ │ │ └── 0
│ │ │ │ ├── 300 <= #follows < 500
│ │ │ │ │ └── 0
│ │ │ │ └── 500 <= #follows < 1000
│ │ │ │ └── 1
│ │ │ ├── 1 <= description length < 50
│ │ │ │ ├── 0 <= #follows < 100
│ │ │ │ │ └── 0
│ │ │ │ ├── 100 <= #follows < 300
│ │ │ │ │ └── 0
│ │ │ │ ├── 1000 <= #follows < inf
│ │ │ │ │ └── 1
│ │ │ │ ├── 300 <= #follows < 500
│ │ │ │ │ └── 0
│ │ │ │ └── 500 <= #follows < 1000
│ │ │ │ └── 0
│ │ │ ├── 100 <= description length < inf
│ │ │ │ └── 0
│ │ │ └── 50 <= description length < 100
│ │ │ └── 0
│ │ ├── 0.1 <= nums/length username < 0.2
│ │ │ └── 0
│ │ ├── 0.2 <= nums/length username < 0.3
│ │ │ └── 0
│ │ ├── 0.3 <= nums/length username < 0.4
│ │ │ └── 0
│ │ ├── 0.4 <= nums/length username < 0.5
│ │ │ └── 0
│ │ └── 0.5 <= nums/length username < 1
│ │ └── 0
│ ├── 1000 <= #followers < inf
│ │ └── 0
│ ├── 300 <= #followers < 500
│ │ └── 0
│ └── 500 <= #followers < 1000
│ ├── profile pic = 0
│ │ └── 0
│ └── profile pic = 1
│ ├── 0 <= nums/length username < 0.1
│ │ └── 0
│ ├── 0.1 <= nums/length username < 0.2
│ │ └── 1
│ ├── 0.2 <= nums/length username < 0.3
│ │ └── 0
│ ├── 0.3 <= nums/length username < 0.4
│ │ └── 0
│ ├── 0.4 <= nums/length username < 0.5
│ │ └── 1
│ └── 0.5 <= nums/length username < 1
│ └── 0
├── 200 <= #posts < 300
│ ├── 0 <= #followers < 100
│ │ └── 1
│ ├── 100 <= #followers < 300
│ │ └── 0
│ ├── 1000 <= #followers < inf
│ │ └── 0
│ ├── 300 <= #followers < 500
│ │ └── 0
│ └── 500 <= #followers < 1000
│ └── 0
├── 30 <= #posts < 50
│ ├── 0 <= #followers < 100
│ │ └── profile pic = 1
│ │ ├── 0 <= nums/length username < 0.1
│ │ │ ├── 0 <= description length < 1
│ │ │ │ ├── 0 <= #follows < 100
│ │ │ │ │ └── 1
│ │ │ │ ├── 100 <= #follows < 300
│ │ │ │ │ └── 0
│ │ │ │ ├── 1000 <= #follows < inf
│ │ │ │ │ └── 0
│ │ │ │ ├── 300 <= #follows < 500
│ │ │ │ │ └── 0
│ │ │ │ └── 500 <= #follows < 1000
│ │ │ │ └── 0
│ │ │ ├── 1 <= description length < 50
│ │ │ │ └── 0
│ │ │ ├── 100 <= description length < inf
│ │ │ │ └── 0
│ │ │ └── 50 <= description length < 100
│ │ │ └── 0
│ │ ├── 0.1 <= nums/length username < 0.2
│ │ │ └── 0
│ │ ├── 0.2 <= nums/length username < 0.3
│ │ │ └── 0
│ │ ├── 0.3 <= nums/length username < 0.4
│ │ │ └── 1
│ │ ├── 0.4 <= nums/length username < 0.5
│ │ │ └── 0
│ │ └── 0.5 <= nums/length username < 1
│ │ └── 1
│ ├── 100 <= #followers < 300
│ │ ├── profile pic = 0
│ │ │ └── 1
│ │ └── profile pic = 1
│ │ ├── 0 <= nums/length username < 0.1
│ │ │ ├── 0 <= description length < 1
│ │ │ │ └── 1
│ │ │ ├── 1 <= description length < 50
│ │ │ │ └── 0
│ │ │ ├── 100 <= description length < inf
│ │ │ │ └── 0
│ │ │ └── 50 <= description length < 100
│ │ │ └── 0
│ │ ├── 0.1 <= nums/length username < 0.2
│ │ │ └── 0
│ │ ├── 0.2 <= nums/length username < 0.3
│ │ │ └── 0
│ │ ├── 0.3 <= nums/length username < 0.4
│ │ │ └── 0
│ │ ├── 0.4 <= nums/length username < 0.5
│ │ │ └── 0
│ │ └── 0.5 <= nums/length username < 1
│ │ └── 1
│ ├── 1000 <= #followers < inf
│ │ └── 0
│ ├── 300 <= #followers < 500
│ │ └── 0
│ └── 500 <= #followers < 1000
│ └── 0
├── 300 <= #posts < inf
│ └── 0
└── 50 <= #posts < 100
├── 0 <= #followers < 100
│ └── profile pic = 1
│ ├── 0 <= nums/length username < 0.1
│ │ ├── 0 <= description length < 1
│ │ │ └── 1
│ │ ├── 1 <= description length < 50
│ │ │ └── 0
│ │ ├── 100 <= description length < inf
│ │ │ └── 0
│ │ └── 50 <= description length < 100
│ │ └── 0
│ ├── 0.1 <= nums/length username < 0.2
│ │ └── 0
│ ├── 0.2 <= nums/length username < 0.3
│ │ └── 0
│ ├── 0.3 <= nums/length username < 0.4
│ │ └── 1
│ ├── 0.4 <= nums/length username < 0.5
│ │ └── 0
│ └── 0.5 <= nums/length username < 1
│ └── 0
├── 100 <= #followers < 300
│ └── profile pic = 1
│ ├── 0 <= nums/length username < 0.1
│ │ ├── 0 <= description length < 1
│ │ │ └── 0
│ │ ├── 1 <= description length < 50
│ │ │ └── 0
│ │ ├── 100 <= description length < inf
│ │ │ ├── 0 <= #follows < 100
│ │ │ │ └── 0
│ │ │ ├── 100 <= #follows < 300
│ │ │ │ ├── external URL = 0
│ │ │ │ │ ├── 0 <= nums/length fullname < 0.1
│ │ │ │ │ │ └── name==username = 0
│ │ │ │ │ │ ├── 0 <= fullname words < 1
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ ├── 1 <= fullname words < 3
│ │ │ │ │ │ │ └── 0
│ │ │ │ │ │ ├── 3 <= fullname words < 5
│ │ │ │ │ │ │ └── 1
│ │ │ │ │ │ └── 5 <= fullname words < inf
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.1 <= nums/length fullname < 0.2
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.2 <= nums/length fullname < 0.3
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.3 <= nums/length fullname < 0.4
│ │ │ │ │ │ └── 0
│ │ │ │ │ ├── 0.4 <= nums/length fullname < 0.5
│ │ │ │ │ │ └── 0
│ │ │ │ │ └── 0.5 <= nums/length fullname < 1
│ │ │ │ │ └── 0
│ │ │ │ └── external URL = 1
│ │ │ │ └── 0
│ │ │ ├── 1000 <= #follows < inf
│ │ │ │ └── 0
│ │ │ ├── 300 <= #follows < 500
│ │ │ │ └── 0
│ │ │ └── 500 <= #follows < 1000
│ │ │ └── 0
│ │ └── 50 <= description length < 100
│ │ └── 0
│ ├── 0.1 <= nums/length username < 0.2
│ │ └── 0
│ ├── 0.2 <= nums/length username < 0.3
│ │ └── 0
│ ├── 0.3 <= nums/length username < 0.4
│ │ └── 0
│ ├── 0.4 <= nums/length username < 0.5
│ │ └── 1
│ └── 0.5 <= nums/length username < 1
│ └── 0
├── 1000 <= #followers < inf
│ └── 0
├── 300 <= #followers < 500
│ └── 0
└── 500 <= #followers < 1000
└── 0
```