https://beaver-sohyun.tistory.com/54
[빅데이터] kickstarter에서 Project에 큰 영향을 미치는 Feature 확인하기(3. Decision tree를 이용한 데이터 분석)
이번 포스팅의 'kickstarter project'의 마지막 단계인 결과 분석입니다.
분석은 Decision tree를 이용했습니다.
아직 부족한 점이 많은 성장중인 비버지만 열심히 해보았으니 잘 봐주세요..ㅎ
7. 결과분석
- 정확도 확인하기
y_pred = clf.predict(x_test)
print("accuracy:",metrics.accuracy_score(y_test,y_pred))
print(classification_report(y_test, y_pred))
총 학습의 정확도는 95%가 나왔습니다.
-정밀도(precision)는 실패와 성공을 예측해서 실제 자료 값과 일치하는지에 대한 비율입니다. 실패에서는 100%, 성공에서는 93%입니다
-재현율(recall)은 실제 자료 값 중에 예측한 표본 수 비율입니다. 실패는 91%, 성공은 100%가 나왔습니다.
-f1-score는 정밀도(precision)와 재현율(recall)의 (가중조화) 평균입니다. 실패는 0.95, 성공은 0.96이 나왔습니다.
-support는 각 클래스에 있는 실제 응답 샘플 수입니다. 실패는 22개, 성공은 26개입니다. -
각 정밀도, 재현율 에프원 점수 서포트의 단순평균과 가중평균은 다음과 같습니다.
- Decision tree 확인하기
# 트리를 확인하기 위한 함수
def draw_decision_tree(model):
dot_buf = io.StringIO()
export_graphviz(clf, out_file=dot_buf, feature_names=df.feature_names,
class_names=df.target_names, filled=True,rounded=True)
graph = pydot.graph_from_dot_data(dot_buf.getvalue())[0]
image = graph.create_png()
return Image(image)
draw_decision_tree(clf)
- Decision tree를 통해 분류한 결과입니다.
- 왼쪽 트리를 보시면, 후원자 수가 74명보다 적고 최대 금액 후원자 수가 5명보다 적을 경우 실패한 프로젝트로 분류됩니다. 또한 서포트 단계 수가 5보다 작을 경우 실패한 프로젝트로 분류됩니다.
- 최소 금액 후원자 수가 1명보다 적으면 실패한 프로젝트로 분류됩니다. 여기서 최소 금액 후원자 수가 1명보다 많을 경우는 성공한 프로젝트로 분류됩니다.
- 오른쪽 트리를 보시면 후원자 수가 195명보다 많은 경우는 성공한 프로젝트를 분류됩니다. 또한 최대 금액 후원자 수가 6명보다 적을 경우는 성공한 프로젝트로 분류됩니다. 최소 금액 후원자 수가 1명보다 적을 경우 성공한 프로젝트로 분류되는 것을 볼 수 있었습니다.
entropy값은 0과 1사이의 값을 가지며 0.5에서 멀어질수록 잘 분류된 노드라고 할 수 있습니다.
- feature importance 특성 중요도 확인하기
# 트리를 결정하는데 각 Feature의 중요도를 확인하기 위해 Feature importance를 이용
def plot_feature_importances(model):
n_features=df.data.shape[1]
plt.barh(range(n_features),model.feature_importances_,align='center')
plt.yticks(np.arange(n_features),df.feature_names)
plt.xlabel('importance_value')
plt.ylabel('feature')
plt.ylim(-1,n_features)
# 시각화하여 보기 쉽게 표현
#프로젝트의 성공여부에 크게 영향을 끼치는 Feature 확인
feature_importance_values = best_df_clf.feature_importances_
plot_feature_importances(clf)
#Feature importance 함수를 이용해 특성 중요도 확인
importance = clf.feature_importances_
#0은 전혀 사용되지 않았다는 뜻이고 1은 완벽하게 예측했다는 뜻
#backers, Maximum amount of sponsors, Minimum amount of sponsors, Number of projects opened 순으로 중요도 확인
importance_list = list(zip(x_train.columns,importance))
sorted(importance_list, key=lambda x:x[1],reverse=True)
feature importance 특성 중요도를 이용해. Tree를 만드는 데 각 특성이 얼마나 중요한지 확인해보았습니다.
- x축에는 중요도의 값, y축에는 feature들의 이름을 나타냅니다.
- 시각화 결과, 후원자 수가 다른 feature들보다 월등히 높은 중요도를 보였습니다.
- 0은 전혀 사용되지 않았다는 뜻이고 1에 가까운 값일수록 완벽하게 예측했다는 뜻입니다.
- 프로젝트 제작자의 개설 횟수는 전혀 사용되지 않았고, 후원자 수가 tree를 만드는 과정에서 가장 크게 영향을 끼쳤다는 것을 볼 수 있었습니다.
- 5개의 feature 중 후원자 수, 최대, 최소 금액 후원자, 서포트 금액별 단계 개수 순으로 프로젝트의 성공과 실패에 중요했으며, 가장 큰 영향을 미친 feature는 후원자 수임을 알 수 있었습니다.
- 프로젝트의 개설 횟수는 프로젝의 성공실패여부에 영향을 끼치지 않았다는 것을 볼 수 있었습니다.
1. Backers(약 94%)
2. Maximum amount of sponsors(약 0.35%)
3. Minimum amount of sponsors(약 0.02%)
4. Total number of support steps(약 0.01%)
5. Number of projects opended(0%)
학교 과제로써 프로젝트를 진행했지만 과제를 하면서 아주 살-짝 재미있기도 했고 신기하기도했고..!
다음에도 종종 이런식으로 빅데이터 분석을 통해 의미있는 결과를 가져오겠습니다!
이번에는 첫 분석이라서 그런지 정확하지 않지만 그래도 ... 처음이니깐... 그냥 작은 비버가 한 단계 더 성장했구나! 라고 봐주세요.. 헿
긴 글 봐주셔서 감사드립니다
다들 행복한 하루 보내시길 바랄께요!
다음에는 좀 더 성장된 작은 비버의 과제 수행기를 들고오겠습니다!