教育众筹平台数据分析

DonorsChoose.org是一个在线慈善众筹平台,它允许教师通过在线门户提交材料和特定设备的需求,以确保所有孩子都有平等的教育机会。这个项目是基于Kaggle竞赛“预测DonorsChoose.org上的兴奋度”而建立的,旨在寻找既值得注意又成功的项目。

DonorsChoose平台利用众筹来缩小教育资金缺口。自2000年以来,他们已经帮助美国4000万学生获得了9.7亿美元的捐款。然而,大约三分之一的项目在首次发布后的四个月内无法完成目标。通过确保更多项目达到筹资目标,这个项目将帮助DonorsChoose缩小教育资金缺口。将构建一个早期预警系统,检测最近发布的项目可能无法达到财务目标,使DonorsChoose能够通过捐赠匹配奖励进行干预。

DonorsChoose是一个公开可用的数据集,提供有关美国教师提出的学校项目的信息。通过使用机器学习模型来确定捐赠者的行为,并从数据集中筛选出重要的项目,该建议将解决保持现有贡献者的问题。

数据预处理的重要性

本文将重点介绍文本预处理的主题。将总结所有重要的步骤,但不会深入理论背景。对于理论背景,请参考之前的帖子,在那里详细解释了所做的工作和原因。

预测分析的目标

竞赛的目标是在DonorsChoose数据集上实现不同的机器学习算法,并计算/分析测试数据集的准确性。导入所有必要的库以执行分析。

# 导入必要的库 import pandas as pd from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer from sklearn.preprocessing import normalize from sklearn.naive_bayes import MultinomialNB from sklearn.metrics import roc_auc_score from wordcloud import WordCloud import matplotlib.pyplot as plt import nltk from nltk.sentiment.vader import SentimentIntensityAnalyzer from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import GradientBoostingClassifier from sklearn.model_selection import GridSearchCV

加载数据

首先,需要加载数据集,并对其进行初步的探索性数据分析

data = pd.read_csv('preprocessed_data-Copy1.csv') print(data.shape) print(data["project_is_approved"].value_counts(normalize=True)) data.describe(include=["object", "bool"])

数据分割

将使用分层抽样将数据分为训练集和测试集。

y = data['project_is_approved'].values X = data.drop(['project_is_approved'], axis=1) # 删除目标变量 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, stratify=y, random_state=42)

编码文本特征

将使用词袋模型(BOW)和TF-IDF模型来编码文本特征,如项目描述或标题。

vectorizer = CountVectorizer(min_df=10, ngram_range=(1, 4), max_features=7000) tfidf_vector = TfidfVectorizer(min_df=10, max_features=7000)

编码分类和数值特征

接下来,将编码分类特征和数值特征。

vectorizer_state = CountVectorizer() normalizer = normalize

合并所有特征

将合并所有编码后的特征,以便用于模型训练。

from scipy.sparse import hstack X_tr = hstack((X_train_essay, 'All encoded features')).tocsr() X_te = hstack((X_test_essay, 'All encoded features')).tocsr()

应用朴素贝叶斯

将应用朴素贝叶斯分类器来预测项目是否能够成功。

naive_bayes_1 = MultinomialNB(class_prior=[0.5, 0.5]) parameter_1 = {'alpha': list(np.arange(0.001, 100, 2))} classifier_1 = GridSearchCV(naive_bayes_1, parameter_1, scoring='roc_auc', cv=10, return_train_score=True) classifier_1.fit(X_tr, y_train)

词云

词云是一种文本数据可视化方法,其中最常用的术语以最大的字体大小显示。

words_string = (" ").join(fp_words) wordcloud = WordCloud(width=1000, height=500).generate(words_string) plt.figure(figsize=(25, 10)) plt.imshow(wordcloud) plt.axis("off") plt.show()

决策树分类器

model = DecisionTreeClassifier() clf = GridSearchCV(model, param_grid, cv=3, scoring='roc_auc', return_train_score=True) clf.fit(X_train1, y_train) from sklearn.ensemble import GradientBoostingClassifier parameters = {"max_depth": [1, 2, 3, 4], "min_samples_split": [5, 10, 15, 20]} clf = GridSearchCV(GradientBoostingClassifier(), parameters, cv=5, scoring='roc_auc', return_train_score=True, n_jobs=-1) clf.fit(X_train1, y_train)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485