这是我们的一个结课项目,接下来我将通过复盘的形式,将我们的项目复现一遍,需要的小伙伴可以私信自取,看到会回复的。

        在上学的时候,我就特别喜欢购物,但是在学校驿站拿快递非常不方便,有时候人太多,需要排队时间太长了,很不方便,这时候我就在想,如果能提前知道驿站今天拿快递的人多不多,需要等待多长时间就好了,这样我就能合理安排自己的时间,这个项目就这样诞生了。

        和普通的数学建模一样,首先我们要有一个大体流程。我们最终的目的是,提前知道驿站排队等待时间,这是要输出的结果。我们为了达到这个目的,要先收集数据,然后选一个模型算法,训练模型,然后测试,接着将它部署到微信小程序上,可以随时查看。

一.数据收集与预处理

        这是建模前必不可少的一步。第一步我们要收集数据,这时就有一个问题,应该选取哪些指标。假设我们要算出驿站取件等待时间,我们应该要先知道,每个人取件都要花多长时间,大家都集中在什么时间取件,不同年级上课或者其他活动是否会影响取件集中时间,比如大家下课回宿舍前都喜欢去取件,还应该考虑,住的距离是否对于取件时间有影响,天气情况是否对取件时间有影响,买的快递是否是急件着急拿等。

        因此我们选取了这样几种指标:日期,时段,是否上课日,对应时段下课班级数量,主要下课时间点,取件人年级,取件人宿舍距离快递站,快递类型,是否急件,天气情况,该时段取件量,该时段平均等待时间(分钟), 该时段工作人员数量,该用户历史取件时段偏好。

        确定好指标之后,就要开始找数据了。刚开始我是想去学校的快递站直接要一些数据的,但是因为各种原因,没有拿到数据。因此我开始从网上一些开源数据集中寻找。但是因为实在是范围太小而且指标太多而放弃。最终我选择随机生成,但是这样存在一些“真实性不强”的问题,这里我就简单和AI阐述了学校的大体情况,得到了以下数据。

        这里一共有大概600条数据,对于一般训练应当是够用了,但是因为是AI生成的数据,存在一些规律性,因此对后面的模型训练产生了阻碍,导致后面出现模型梯度爆炸,所以又重新确定了数据。在确定数据时,我们发现数据的属性过多,如果在小程序页面让同学们输入过多信息可能会降低效率和耐心,因此我们对属性个数进行删减。但是被删掉的属性并不是不存在了,而是在后续小程序中有一个固定预设值,不需要同学们手动输入修改。

        这是我们新的数据,这时我们将属性指标确定为上面的6个,并且将数据量从600增加到1000。接下来就是数据预处理。但是因为模型算法还没有确定,因此这里只能做一些简单的缺失值、异常值处理。因为是随机生成,所以这里就省下来这一步,我们进行下一步模型算法的选取。

二.BP神经网络

        这里选取BP,不是因为我前期对比了很多东西,然后才选择这个模型,是因为老师的选题范围里面这个最合适,因此就选了这个,但是为了完整复现这个项目,我们还是要认真对比一下。

        我们知道,每一个模型算法的优缺点各不相同,因此选取什么样的,多数取决于我们要解决什么问题和我们最终的目的是什么。现在我们要进行的是快递等待时间的预测,因为属性不算多,也没有太多限制,因此一些预测类的机器学习算法和神经网络都是可以的。

        这里的BP神经网络,我们使用两个隐含层,输入层6个节点,输出层一个节点。评价指标我们选取可决系数和均方误差。这里我们用到的BP应该是比较简单的结构,只有两个隐含层。评价指标的选取其实应该要严谨,这里我用的是最基本也是最熟悉的评价指标。

        最终结果如上图所示。效果还是相当不错的,可决系数为0.9,十分接近1,均方误差在2分钟以内,也是我们可以接受的一个上下波动。

三.小程序部署

        说实话刚开始想要做小程序是因为静态网页效果不好,并且考虑到同学们平时使用手机端比较多,因此做成微信小程序方便同学们使用,也方便后期的推广。但是因为前面并没有接触过,所以尽管有AI的帮助,还是反反复复出现了很多问题,还好最后成功完成。

        接下来是我的一些理解,如果有问题,欢迎大家在评论区指正。因为现在我们已经训练好了程序,能够通过同学们的一些信息输入做一个预测。那如何让我们训练好的模型代码和小程序产生关联呢,这里用到了API。对于这个我的理解是,API相当于一个中介,通过访问相同的网络IP,来传递我们的一些信息数据。

        这里提到的API也是python语言可以直接写的,如果不了解的同学们,可以用AI做一个辅助,我也是求助了AI一起完成的。API接口完成之后,我们就可以正式开始小程序部署。如果你担心出现问题,可以多加一步,用postman做一个验证测试。

        效果大概就是这样,这里也能够返回你的预测结果。postman测试成功之后,说明我们的python代码这块已经没有问题了,这时就可以开始部署微信小程序了。因为这是我们的课设作业,因此我就没有购买服务器之类的,只是通过我们微信提供的平台,做了一个最简单的上传。

        大家可以去下载一个微信开发工具,在这里我们可以去写我们小程序的页面和功能按钮,需要注意的是,要下载最新的版本,否则后面可能和我一样,在打包上传代码过程中,出现版本低的情况,容易返工。下载好之后,里面有现成的一些小模版,我们也可以自定义。

        然后就可以开始写我们的代码,微信小程序的代码感觉和网页的代码很像,里面应该还有一些JAVA或者智能终端的语句,因为我是借助AI完成的,这里就不过多说了。完成代码之后,可以直接找到网页版的微信小程序官网,将代码打包上传,这样就能在微信搜索到你写的小程序了。

四.总结

        上面大概就是我们课设的一些思路总结分享,如果有需要的朋友可以评论区留言,我把代码发给大家,但是因为这里涉及到API,因此可能有些地方没办法直接运行,需要自己进行一定的修改。对于这个项目,我还在做完善和更新,我认为它还有很大的提升空间,因此,在后面,我可能会更新它的升级版,好了,就到这里,有什么想法和问题,欢迎留言。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐