Student financial aids with neural network approach​
​by Thao Nguyen
Who should receive financial aids? Student A with nearly perfect GPA from an upper middle class family or Student B with lower GPA from a lower social background?
You probably guess it should be student B because the purpose of financial aids is to help students with financial difficulties. However, it might not be the case in reality. Universities might decide to give student A more financial aid to prevent him or her from attending a different university.
Over the last few decades, college tuition fees in the US have increased significantly. Some hypothesized that this trend started because of college rankings. Colleges found that increasing tuition fees make them appear more prestigious to students, and thus attract more students. However, this strategy used by colleges also exclude some students from attending universities.
Our model is designed to uncover the decision rule that universities use to give financial aids to students. Using our algorithm, we can predict whether a student is likely to receive financial aid offer from a particular university given their backgrounds. This is beneficial to students because the model helps them to improve their leverage when applying to universities. Hopefully, the model will help to rectify the unfair relationship between universities and students.
We have the real world data but face some restrictions on sharing the data. Luckily, Wolfram Language give us ability to LearnDistribution and thus, generate data for our project. This distribution fits the real world data well so we can safely use this LearntDistribution to continue our research.
syntheticDataSet=RandomVariate[LearnDistribution[selectedData],10^4];
Take a look at the first 5 lines:
In[]:=
syntheticDataSet〚;;5〛//Dataset[#]&
Out[]=
Also, the real world data file is very large which cannot be opened with excel. However, we manage to build a streaming importer with only a few lines in Wolfram Language to read the data.
readStream=OpenRead[bigCSV];​​realDataSize=10000;​​Read[readStream,String];​​selectedPortion=readStream//pipe[​​ReadList[#,String,realDataSize]&​​,Riffle[#,"\n"]&,StringJoin​​,ImportString[#,"CSV"]&​​];​​Close[readStream];
The traditional models are often criticised for being too simple and unrealistic. Analytic models can only take in a few variables. This Neural Network model we built can take in many variables.
Using our model, we can give prediction to a single student.
In[]:=
Information[singleStudentModel,"MXNetNodeGraph"]
Out[]=
​
However, as it is not realistic to do statistics on a single student model, we use NetMapThreatOperator to feed a bunch of student into the model.
In[]:=
trainingNet=Module[{studentBatchSize=10},​​NetGraph[{NetMapThreadOperator[singleStudentModel],CrossEntropyLossLayer["Index"]},​​{​​(NetPort/@Join[nominalKeys//DeleteCases["LDCZ099C"],numericalInputKeys])1NetPort[2,"Input"]​​,NetPort["LDCZ099C"]NetPort[2,"Target"]​​}​​,nominalInputWay//KeyDrop["LDCZ099C"]//Map[VectorT[studentBatchSize,#]&]//Normal//Apply[Sequence]​​,numericalInputKeys//Map[#{studentBatchSize,1}&]//Apply[Sequence]​​,"LDCZ099C"VectorT[studentBatchSize,NetEncoder[{"Class",{"0 Not applicable","1 Applicable"}}]]​​]​​];
Our model is built not only to compute prediction for a single student but also how a single student decision would produce feedback for the whole system. This hope to balance the relationship between universities and students and give students the education they deserve.