Building AI course project
First phase: Creation of machine learning models based on historical data from a Food Bank.
Second phase: Automation of a local Food Bank, using an App integrated with a ChatBot with NLP, to manage the food demand of needy families.
A food bank is a volunteer-based organization whose objective is to recover food, especially non-perishable food, from companies, supermarkets and individuals, through collaborating associations, for subsequent free distribution to people at risk of social exclusion.
The management of a food bank is complex, so sometimes resources are wasted (food that expires, that remains in stock, that is not distributed efficiently, etc.) and it is complicated to organize the volunteers, the inventory in the warehouses and the collection and distribution of food.
I believe that, in order to tackle this project, it would be necessary to do it in two stages:
First phase:
With the historical data that we currently have in spreadsheets, we can make a prediction of the food needed for distribution in each campaign, through automatic training, to improve the use of resources, avoiding the accumulation of surplus in warehouse, the expiration of food or the increase of spoiled or damaged food for various reasons, making a more efficient food distribution.
Second phase:
Once the results of the first stage have been seen, in order to improve the system, an integrated food management system could be implemented in which a specialized App integrated with a chatbot would play an important role, using predictive data from automatic training based on historical data on inventory, storage, requests, food distribution and volunteer management; as well as communication with the parties involved with valuable information (recipients, donors, neighborhood associations, volunteers, etc.).
My personal motivation comes from the voluntary participation in the work of a food bank. This issue is important because it is about optimizing resources for families living in poverty or at risk of social exclusion.
In the project I am presenting for the Building AI course, I will develop only the first stage.
The data sources are based on the historical data collected from previous campaigns for food collection and distribution: lists of food collected or purchased, lists of food distributed, lists of beneficiary associations, lists of volunteers, etc. These data are currently collected in spreadsheets, without personal data.
In this first phase, machine learning techniques will be applied to predict needs in future campaigns based on data collected in previous campaigns.
To feed the machine learning models for the predictions and functionalities mentioned above, accurate and relevant user data collection is essential.
In principle, we will start from the data currently available, provided by the neighborhood associations in different campaigns and by the annotations made in spreadsheets.
The data collected, for a first study for forecasting future needs, are contained in a standardized model with a series of interrelated tables. In order to be able to apply a machine learning model, a data integration has been performed, combining the tables by means of union operations (data join), in order to be able to work with a single denormalized table, with a previous non-exhaustive data cleaning, due to the fact that there were hardly any missing values or errors.
The names of the different categories or variables are in Spanish language, because the project is applied with data collected locally, in Spain. Although in a second phase of the project we will be able to have more quality data over time, the data available at this time are as follows:
- neighborhood (barriada) indicative: Each food collection and distribution campaign is done by neighborhoods, with the help of the neighborhood associations.
- Year (ano) with format YYYYY.
- Campaign (camp) with format (P, V, O, I) corresponding to the 4 campaigns in the seasons of the year.
- Population from zero to two years old (bebes): babies between zero and two years old in each zone or neighborhood.
- Population from 3 to 10 years old (ninos): Population between three and ten years old.
- Population aged 11 to 65 years (adultos): Population aged between eleven and sixty-five years.
- Population over 65 years old (seniors).
- Unemployment rate (desempleo): Unemployment rate by neighborhood in percent.
- Users served (usuarios): Number of people served in each neighborhood and campaign.
- Type of food unserviceable due to various causes, of food type A01 (ac01 = expired food type A01).
- Distributed food type A01 (ad01 = distributed food type A01): Quantity of food type coded A01 distributed in units (packages, cans, UTH). All foods are packaged, canned or bottled, and each package was noted as a unit, regardless of weight or size.
Food types are coded as follows:
Ad01 = Baby food (infant formula, infant milks, etc.) - Baby food (infant formula, infant milks, etc.).
Ad02 = Cereals and grains (rice, pasta in various forms, quinoa, flaked or grained oats, buckwheat, millet, breakfast cereals, whole grain cereals).
Ad03 = Dried pulses (lentils, chickpeas, beans, dried peas, soybeans).
Ad04 = Canned and tinned foods (canned vegetables, canned fruits, canned fish, canned meats, peanut butter or chocolate, powdered milk, condensed milk, honey).
Ad05 = Nuts and seeds (almonds, walnuts, pumpkin seeds, sunflower seeds, etc.).
Ad06 = Oils and fats (olive oil, sunflower oil, coconut oil, canola oil, butters).
Ad07 = Sweets and snacks (granola bars, cookies, chocolate bars, dried fruits, jams).
Ad08 = Sauces and condiments (salt, ketchup, mustard, soy, bouillon cubes or powdered broth).
Ad09 = Beverages (coffee, tea, powdered beverages, UTH bedding, pasteurized fruit juices, packaged soups).
Ad10 = Flours and bakery products (wheat flour, corn flour, toasted bread, packaged sliced bread).
Given the assumption that different food types are significantly influenced by the input characteristics and for interpretability reasons, I will choose to treat each food type separately, trying different models, taking care not to over-fit. So we will have as many tables as different types of food.
Although, at first glance, it can be deduced that the seasonal variations of the different campaigns influence the amount of food donated and requested, by having a temporal characteristic (campna) that practically coincides with the seasons of the year, the model chosen can recognize the patterns associated with each period, which allows not to make further divisions and to treat in a single file each type of food.
Attached are files in CSV format, on which machine learning algorithms based on several models will be applied to study which ones respond better to this data set.
I will start with multiple linear regression model, using as dependent variable the amount of food to distribute (adxx for each type of food).
This model is appropriate because you want to know how several independent variables (predictors) influence a continuous dependent variable (the amount of food to be distributed in 'adxx'). In addition, the multiple linear regression model can handle both numerical variables (such as babies, children, adults, seniors, unemployment, users, ac01) and categorical variables (such as neighborhood and bell), although categorical variables must be properly coded before including them in the model.
Multiple linear regression model with cross-validation
# The necessary pandas and sklearn libraries are imported.
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, mean_absolute_error, make_scorer, r2_score
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.model_selection import KFold, cross_validate
# Load the data from the CSV file from the specified path.
data_path = 'https://github.com/marmartiher/ALFB/blob/main/BancoAlimentos01.csv'
data = pd.read_csv(data_path)
# Prepare the data by separating the independent variables (X) from the dependent variable (y).
X = data.drop('ad01', axis=1) # Independent variables
y = data['ad01'] # Dependent variable
# Coded the categorical variables 'slum' and 'bell' as One-Hot, and took the numeric variables unchanged.
preprocessor = ColumnTransformer(
transformers=[
('cat', OneHotEncoder(handle_unknown='ignore'), ['barriada', 'ano', 'camp'])
], remainder='passthrough')
# A pipeline including the preprocessing and the linear regression model is created.
model_pipeline = Pipeline(steps=[
('preprocessor', preprocessor),
('regressor', LinearRegression())
])
# Set up cross validation (non-stratified)
cv = KFold(n_splits=5, shuffle=True, random_state=42)
# Define evaluation metrics
scoring = {'MSE': make_scorer(mean_squared_error, greater_is_better=False),
'MAE': make_scorer(mean_absolute_error, greater_is_better=False),
'R2': 'r2'}
# Execute cross validation
cv_results = cross_validate(model_pipeline, X, y, cv=cv, scoring=scoring)
# Show results
print(f"MSE: {cv_results['test_MSE'].mean()}")
print(f"MAE: {cv_results['test_MAE'].mean()}")
print(f"R^2: {cv_results['test_R2'].mean()}")
import seaborn as sns
import matplotlib.pyplot as plt
# Prepare a list of independent variable names, excluding 'ad01'.
independent_variables = data.columns.drop('ad01')
# For each independent variable, create a scatter plot with 'ad01'.
for var in independent_variables:
sns.scatterplot(data=data, x=var, y='ad01')
plt.title(f'Relationship between {var} and ad01')
plt.show()
# Calculates the minimum and maximum of the dependent variable 'ad01'.
ad01_min = data['ad01'].min()
ad01_max = data['ad01'].max()
# Calculates the range (difference between the maximum and minimum)
ad01_range = ad01_max - ad01_min
# Calculates the mean of 'ad01'.
ad01_mean = data['ad01'].mean()
print(f"Min: {ad01_min}, Max: {ad01_max}, Range: {ad01_range}, Mean: {ad01_mean}")
The values shown in this model are as follows:
MSE: 176.42885071471335
MAE: 9.87150146484375
R^2: 0.9744919743946632
Min: 113, Max: 438, Range: 325, Mean: 267.9516129032258
Model evaluation considerations:
The MSE is a measure of the quality of an estimator; it is always non-negative, and smaller values indicate a better fit. An MSE of 176 suggests that, on average, the model predicts the dependent variable ad01 with a mean square error of 176. Since the MSE depends on the scale of the variable, it is useful to compare it with the range and mean of ad01 to get a better idea of its magnitude.
The MAE is another measure of error that provides the mean absolute difference between observed and predicted values. An MAE of 9.9 indicates that, on average, the model predictions deviate by 9.9 units from the actual values. It is a more robust measure and easier to interpret compared to the MSE, especially in the presence of outliers.
The R^2 is a measure that indicates the proportion of the variation in the dependent variable that is predictable from the independent variables. An R^2 of 0.97 is quite high, suggesting that the model is able to explain 95% of the observed variability in ad01, indicating a good fit.
Min: 113, Max: 438, Range: 325, Mean: 268. These statistics provide an overview of the distribution of the dependent variable ad01. The variation of ad01 between 113 and 438, with a range of 325, indicates a wide dispersion in the data. The mean of 268 reflects the average value of ad01 in the data set.
The relationship between the MSE and the rank of ad01 may offer additional insights. Although the MSE seems high, the rank of the dependent variable is also high. Therefore, an MSE of 176 can be considered reasonable in this context. Furthermore, the high value of R^2 suggests that the model is effective in predicting ad01 from the available independent variables.
The results indicate a fairly effective linear regression model for predicting ad01, with a fit that explains a large proportion of the variability in the dependent variable. Interpreting these results in the specific context of the data (e.g., the meaning of ad01, neighborhood, and bell) may provide further insights on how to improve the model.
Visualizing the relationship between each independent variable and ad01 using scatter plots can help identify linear or nonlinear patterns, potential outliers, and whether the relationship between variables is direct or inverse. This can be useful for future model adjustments or to identify variables that might need transformations.
We can see that, for example, in the relationship between babies and the amount of food ad01, there is a positive relationship between the increase in babies and the increase in food type ad01. Which is logical in this case, since food type ad01 encompasses food intended for babies. The graph shows different groups of points, which suggests that there are subgroups within the data, but this is probably due to the fact that at certain times of the year (food distribution campaigns) there is usually more demand for food in general and, therefore, for this type of food as well.
In another example of the relationship between the independent variable campaign and the type of food ad01, it can be seen how in the winter (I format) and autumn (O format) campaigns there is a greater distribution of this type of food, especially in the winter campaign, while the other two seasonal campaigns are more equal in the demand for this type of food and below those mentioned above.
The relationship between users and the type of food demanded, ad01, is positive but somewhat more dispersed than between babies and ad01, which has a certain logic, since users consume all types of food and ad01 are specific foods for babies.
I have also tried the SVR model, but it gives very poor forecasts, and I have not been able to adjust it.
Neural Network Model with cross-validation
Another model that has given good results has been a neural network model. Below I show the code in Python language:
# Neural Network Model
from sklearn.model_selection import StratifiedKFold, cross_validate
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.neural_network import MLPRegressor
import pandas as pd
import numpy as np
# Load data
data_path = 'https://github.com/marmartiher/ALFB/blob/main/BancoAlimentos01.csv'
data = pd.read_csv(data_path)
# Prepare the data. The variable 'camp' is stratified so
# that it enters into each fold proportionally,
# since the amount of food to be distributed differs
# significantly depending on the season of the year.
X = data.drop('ad01', axis=1) # Independent variables
y = data['ad01'] # Dependent variable
groups = data['camp'] # Variable for stratification
# Identify categorical and numerical variables
categorical_features = ['barriada', 'ano', 'camp']
numeric_features = ['bebes', 'ninos', 'adultos', 'seniors', 'desempleo', 'usuarios', 'ac01']
# Create the preprocessor
preprocessor = ColumnTransformer(
transformers=[
('onehot', OneHotEncoder(handle_unknown='ignore'), categorical_features),
('scaler', StandardScaler(), numeric_features)
])
# Create a pipeline with the preprocessor and the neural network model
model_pipeline = Pipeline(steps=[
('preprocessor', preprocessor),
('regressor', MLPRegressor(hidden_layer_sizes=(64, 64), activation='relu',
random_state=42, max_iter=1000))
])
# Stratification based on 'camp'.
stratified_cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
# Configure and perform cross validation
# Note: StratifiedKFold is normally used for classification.
# To use it for regression, 'camp' must be categorical.
cv_results = cross_validate(model_pipeline, X, y, cv=stratified_cv.split(X, groups),
scoring=['neg_mean_squared_error', 'neg_mean_absolute_error', 'r2'],
return_train_score=False)
# Calculate metric averages
mse = -cv_results['test_neg_mean_squared_error'].mean()
mae = -cv_results['test_neg_mean_absolute_error'].mean()
r2 = cv_results['test_r2'].mean()
print(f"MSE (Mean Squared Error): {mse}")
print(f"MAE (Mean Absolute Error): {mae}")
print(f"R² (Coefficient of Determination): {r2}")
# Calculates the minimum and maximum of the dependent variable 'ad01'.
ad01_min = data['ad01'].min()
ad01_max = data['ad01'].max()
# Calculates the range (difference between the maximum and minimum)
ad01_range = ad01_max - ad01_min
# Calculates the average of 'ad01'.
ad01_mean = data['ad01'].mean()
print(f"Min: {ad01_min}, Max: {ad01_max}, Range: {ad01_range}, Mean: {ad01_mean}")
The results obtained are as follows:
MSE (Mean Squared Error): 96.03013880047084
MAE (Mean Absolute Error): 7.740741005126234
R² (Coefficient of Determination): 0.9819430725498952
Min: 113, Max: 438, Range: 325, Mean: 267.9516129032258
Model evaluation considerations:
MSE (Mean Squared Error) of 96.0301: This metric indicates the mean squared error between model predictions and actual values. The MSE is sensitive to outliers because it squares the errors. In the context of the dependent variable (ad01) which has a range of 325 and a mean of approximately 267.95, an MSE of 96 seems to indicate that the model has a good degree of accuracy, although this metric alone does not give us a complete picture without considering MAE and R².
MAE (Mean Absolute Error) of 7.7407: The MAE measures the average of the absolute errors between predictions and actual values. An MAE of 7.74, given the range and mean of ad01, suggests that the model predictions are fairly accurate in absolute terms. This value is quite low, especially considering the scale of the target variable.
R² (Coefficient of Determination) of 0.9819: An R² value close to 1 indicates that the model explains a large proportion of the variability in the data. An R² of 0.9819 is excellent, suggesting that the model is highly effective in capturing the relationship between the independent variables and the dependent variable.
Rank of 'ad01' of 325, with a minimum of 113, a maximum of 438, and a mean of approximately 267.95: These values provide context about the distribution and scale of the variable being predicted. The fact that the MAE is significantly less than the range indicates that the model, on average, predicts the values of ad01 with relatively small error.
This neural network model appears to perform well in the prediction task. The low MAE and MSE, together with a very high R², indicate that the model is able to make accurate predictions and effectively captures the variability of ad01.
However, it is important to also consider the possibility of overfitting, especially with complex models such as neural networks. On the other hand, a neural network model with cross-validation requires computational power, so in this case, given the small difference in results with a regression model, it may be appropriate to opt for the linear regression model.
In order not to be too long, I will show the behavior of these two models with another type of food, the amount of food estimated for type Ad02 (Cereals and grains: rice, pasta in various forms, quinoa, flaked or grain oats, buckwheat, millet, breakfast cereals, whole grain cereals), as the target variable. For the rest of the food types the behaviors of these models have been very similar.
Applying the regression model in ad02 (just change the CSV file and the name of the dependent variable in the code), we get the following results:
MSE: 7911.961360402739
MAE: 64.35884951796959
R^2: 0.9577771270155632
Min: 710, Max: 2625, Range: 1915, Mean: 1518.8951612903227
The MSE and MAE, although they seem high in comparison with the application to the ad01 food type, should be evaluated in the context of the range and variation on the ad02 scale.
R^2 (Coefficient of Determination), gives a quite acceptable value 0.96, which explains 96% of the variability in the data, and can be considered very good.
The range of 1915 with respect to the mean of 1518.9, together with the MSE and MAE values suggest a relatively low error.
However, we can review the visualization of the data and predictions, looking graphically at the difference between predicted and actual values, and a scatter plot to see how the predictions line up against the actual values.
For this we will use the following Python code:
from sklearn.model_selection import cross_validate
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score, make_scorer
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
from sklearn.pipeline import Pipeline
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# Upload data
data_path = 'https://github.com/marmartiher/ALFB/blob/main/BancoAlimentos02.csv'
data = pd.read_csv(data_path)
# Prepare the data
X = data.drop('ad02', axis=1) # Variables independientes
y = data['ad02'] # Variable dependiente
# One-hot coding for categorical variables and passthrough coding for numeric variables
preprocessor = ColumnTransformer(
transformers=[
('cat', OneHotEncoder(handle_unknown='ignore'), ['barriada', 'ano', 'camp'])
], remainder='passthrough')
# Create a pipeline with preprocessing and regression modeling
model_pipeline = Pipeline(steps=[
('preprocessor', preprocessor),
('regressor', LinearRegression())
])
# Set up cross validation
cv_results = cross_validate(model_pipeline, X, y, cv=5,
scoring={'MSE': make_scorer(mean_squared_error, greater_is_better=False),
'MAE': make_scorer(mean_absolute_error, greater_is_better=False), 'R2': 'r2'})
# Print the results of the cross validation
print(f"MSE (Mean Squared Error): {-np.mean(cv_results['test_MSE'])}")
print(f"MAE (Mean Absolute Error): {-np.mean(cv_results['test_MAE'])}")
print(f"R² (Coefficient of Determination): {np.mean(cv_results['test_R2'])}")
# Train the model on the whole dataset for visualization
model_pipeline.fit(X, y)
# Make predictions on the entire data set
y_pred = model_pipeline.predict(X)
# Calculate the residuals
residuos = y - y_pred
# Visualization of waste
plt.figure(figsize=(10, 6))
sns.histplot(residuos, kde=True, bins=30)
plt.title('Distribución de los Residuos')
plt.xlabel('Residuos')
plt.ylabel('Frecuencia')
plt.show()
# Scatter plot of predicted vs. actual values
plt.figure(figsize=(10, 6))
sns.scatterplot(x=y, y=y_pred)
plt.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=2)
plt.title('Predicciones vs. Valores Reales')
plt.xlabel('Valores Reales')
plt.ylabel('Predicciones')
plt.show()
The distribution of the residuals resembles a normal distribution, centered around zero, which is a good indicator that the model does not have a systematic bias.
The symmetry of the distribution suggests that the model does not have a tendency to consistently overestimate or underestimate ad02 values.
The predictions appear to align well with the actual values, as the points follow a diagonal line from the lower left corner to the upper right corner.
The presence of this diagonal line indicates a strong correlation between the predictions and the actual values, which is consistent with a high R².
There does not appear to be significant variability in the errors over the range of predicted values, which means that the model is homo-chaotic (errors have constant variance).
The numerical metrics indicate a high performing model.
We now apply the neural network model to make predictions on the dependent variable ad02, using the same code as with variable ad01, changing only the data file and the variable name. Here I have raised the max_iter to 2,000 because it seems to offer better performance.
The results are as follows:
MSE (Mean Squared Error): 2205.2175699536388
MAE (Mean Absolute Error): 35.803643542990315
R² (Coefficient of Determination): 0.9880647883024032
Min: 707, Max: 2623, Rango: 1916, Media: 1519.1854838709678
The performance (in R^2) is somewhat lower than that obtained with the target variable ad01, however, a performance of 0.99 is quite good.
Once the development of the second phase of the project begins, data could be collected in a more direct way as mentioned in the following section.
The data that could be useful in that second phase, always keeping the balance between collecting valuable information and respecting the privacy and security of the users, will be the following:
- Basic Data:
o Contact Information: Name, phone number and email address for communications and notifications.
o Location (Zone or Neighborhood): To optimize distribution logistics and to predict demand in different areas.
- Demographic Data:
o Number of Family Unit Members: This helps to estimate the amount of food needed. o Age Range of Household Members: Important for classifying the type of food and anticipating specific nutritional needs (e.g., infant formula, soft foods for the elderly).
o Food Preferences and Restrictions: Information on allergies, special diets (vegetarian, gluten-free, etc.) to customize deliveries.
- Behavioral Data and Preferences:
o Request History: What foods they have previously requested, frequency of requests, to analyze trends and preferences.
o Preferred Pickup Times: To optimize distribution schedules and reduce waiting times and congestion.
o Interactions with the App: Most visited sections, downloaded resources, to improve personalization of content and services.
- Ethical and technical considerations:
o It is essential to emphasize that all such data must be collected with clear and informed consent from users, explaining how it will be used to improve the service and ensuring their right to opt out at any time. Data security is paramount, and best practices and regulations (such as GDPR in Europe) must be followed for its protection and treatment.
o Data Anonymization: Where possible, data should be anonymized to protect the identity of users.
o Responsible Machine Learning Models: Implement ethical AI practices to ensure that models do not perpetuate bias or discrimination.
- Inventory Efficiency and Management:
o Inventory Optimization: Targeting donations to the most needed items helps avoid excess of certain types of food while lacking others, thus maintaining a balanced inventory.
o Forecasting and Planning: Analysis of past trends and consumption patterns allows for forecasting future needs and planning appropriately, reducing waste and improving resource allocation.
In a second phase of the project, an App will be created using NLP techniques to manage food demand from recipients, and food or cash donations from individuals, integrating it with a chatbot through an API, to communicate with recipients, donors and volunteers.
The App and chatbot will be developed as separate interacting components, to facilitate flexibility to develop and update each component independently, and to make the chatbot also usable on other channels besides the app, such as websites (corporate website) or messaging platforms like WhatsApp or Telegram.
The first phase of the project, focused on the optimization and use of food, will be used by volunteers assigned to control and management tasks, who, in turn, will be responsible for providing the results to those responsible for the food bank, so that they can make the appropriate arrangements with the competent administrations, companies and supermarkets that want to collaborate, as well as with neighborhood associations.
The integration of machine learning in a food bank app can significantly enhance its usefulness, both to improve the user experience and to optimize the operation and distribution of resources. Here I detail how some of the aforementioned functionalities can benefit from machine learning predictions:
- Food Application:
Needs Prediction: based on users' request history and food preferences, a machine learning model could predict which foods will be most requested. This would help better manage inventory and ensure that the most needed food is available.
- Pickup Scheduling:
Optimizing Food Collection Schedules: By analyzing the patterns of quantities of food collected in each campaign, a machine learning system could suggest the best dates for collection, balancing user availability with warehouse space availability and periods of least congestion, thus improving system efficiency.
- Impact on the location of distribution points:
If it is decided to make a distribution by neighborhoods or sectors, knowing the quantities of food to be distributed, the most suitable location can be sought, in collaboration with neighborhood associations that know better the areas and availability of appropriate spaces.
- Backend functionalities for Administrators:
o Consumption Trend Prediction: predictive analytics to anticipate consumption trends and future needs of the community, helping the strategic planning of the food bank.
o Supply Chain Optimization: Predictive modeling to improve logistics, from food procurement to distribution, predicting the best routes, timing of purchases, and storage strategies.
o Fraud Detection: Implement systems that learn normal usage patterns and can alert on anomalous behavior that could indicate system abuse or fraud.
The success of these applications depends on the quality and quantity of data available, as well as an ethical implementation that respects the privacy and security of users. Machine learning, in this context, can not only make the app more efficient and useful, but, at a later stage, can also provide valuable insights to continuously improve the service and proactively respond to the changing needs of the community.
The second phase involves all the parties involved:
As discussed, there are three points of technological support for the development of the second phase of this project:
-
A food management App.
-
A chatbot to support communication with the different parties involved.
-
A corporate website, also for support, information and web presence.
We will develop the characteristics of each of these tools.
- The food management App:
It is a modular development that brings together different aspects of management.
1.1. It can be approached from three different points of view:
1.1.1. An App for direct requests by beneficiaries, with the following advantages and challenges.
- Among the advantages:
o Direct and personalized access: beneficiaries could indicate their specific needs, which could help to personalize food aid.
o Efficiency and reach: An app can handle a large volume of requests and distribute information efficiently.
o Data for continuous improvements: Data collection can help better understand needs and adjust services.
- Potential challenges:
o Technological accessibility: Not all beneficiaries may have access to smartphones or the Internet, limiting access.
o Complexity and usability: The interface and process must be extremely simple to ensure that everyone can use the app without problems.
o Privacy and security: Handling sensitive data requires meticulous attention to user privacy and security.
1.1.2. An App that allows distribution management to be left in the hands of the neighborhood associations.
- Among the advantages:
o Local knowledge: Associations know the specific needs of their community and can identify the families who need it most.
o Human interaction: This approach allows for more personal and direct interaction, which can be crucial for people in vulnerable situations.
o Flexibility in response: Associations can adapt quickly to changing situations in the community.
- Challenges include:
o Scale and efficiency: Manual, localized management may not be as efficient as an automated system, especially when scaling up.
o Subjectivity and favoritism: There is a risk that decisions may be influenced by personal relationships or biases.
o Resource constraints: Associations may have limitations in terms of resources and capacity to handle a large number of requests.
1.1.3. A hybrid approach: Combining the technology of an app with the local knowledge of neighborhood associations. The app could be used to collect applications and manage logistics, while the associations could assist in identifying and reaching beneficiaries, especially those who may have technological access difficulties.
This approach could maximize efficiency and service customization, while maintaining close and sympathetic contact with the community. This third option would perhaps be the most advisable.
Deciding on the best approach requires a detailed assessment of the specific needs of the community, the resources available, and the degree of technological accessibility of the potential beneficiaries.
1.2. Characteristics of the user interface should meet the following requirements:
-
Simple and user-friendly interface: it should be easy to use for people of all ages and technological abilities, with clear instructions and an intuitive design.
-
Accessibility: Implement accessibility standards, such as large text, appropriate color contrast, and screen reader compatibility.
-
Multilingual: Offer several language options to cater to a diverse community.
-
Simplified registration: Easy registration process, possibly with voice or video assistance, minimizing barriers to entry (see data requirements).
1.3. Key functionalities of the Food Bank Management:
-
Food Request: Allow users to select or indicate the types of food they need, preferences (e.g., gluten-free, vegetarian), and any dietary restrictions.
-
Pickup scheduling: Option to select dates and times to pick up food, with the ability to adjust or cancel appointments.
-
Food bank map and locator: Integrate a map showing nearby food banks and routes to reach them.
-
Information and resources: Provide nutrition information and other assistance resources.
-
Notifications and reminders: Send reminders for food pick-up appointments and notifications about the availability of specific foods or new services.
-
Reporting and tracking: For food bank administrators only, integrate backend functionality to track requests, inventory, and generate reports to improve service.
-
Reporting and tracking: For food bank administrators only, integrate backend functionalities to track requests, inventory, and generate reports to improve service.
-
To facilitate collaboration, a section or portal could be developed within the app dedicated exclusively to companies, where they can manage their donations, view impact reports and coordinate volunteer actions.
-
Module for monetary donations: To manage monetary donations through an app effectively and securely, it is crucial to pay attention to several important aspects. Below are some key considerations and functionalities that should be integrated to facilitate monetary donations:
o Security and Reliability:
. Secure Transactions: Implement robust security protocols to protect donors' financial information and ensure that transactions are secure. The use of recognized and trusted payment platforms is critical.
. Regulatory Compliance: Ensure that the donation system complies with applicable financial and privacy regulations, such as PCI DSS for credit card transactions and GDPR for data protection in Europe.
o Ease of Use:
. Simple Donation Process: Design a donation process that is intuitive and requires as few steps as possible, so as not to discourage potential donors.
. Flexible Payment Options: Offer diverse payment options, such as credit/debit cards, PayPal, bank transfers, and perhaps mobile payment options such as Apple Pay or Google Wallet, to accommodate the preferences of all users.
o Transparency and Communication:
. Transparency and Tracking: Donors can follow the journey of their donation, from delivery to distribution, which increases trust and satisfaction.
. Information on Use of Funds: Provide clear details on how donations are used, increasing transparency and building donor confidence.
. Receipts and Acknowledgements: Automatically generate donation receipts for record-keeping purposes and send personalized thank you messages to donors.
. One-Time and Recurring Donations: Allow users to choose between making a one-time donation or setting up automatic recurring donations.
. Targeted Campaigns: Allow donors to contribute to specific fundraising campaigns if they wish, which could be linked to particular needs or featured projects.
. Transparency in Impact: Display up-to-date information on funded projects, success stories, and the overall impact of donations, so that donors see the tangible results of their generosity.
. Tax Information: Provide donors with the information they need to claim their donations on their tax returns, if applicable.
1.4. Technical and Ethical Considerations of the App:
-
Modular Architecture: Design the app with an architecture that facilitates the integration of new modules or services, without affecting its performance or stability.
-
Robust APIs: Develop secure and efficient APIs to enable communication between the app and a chatbot, ensuring that data can flow securely and efficiently between the two.
-
Adaptive User Interface (UI): Ensure that the UI can incorporate the chatbot in a way that enriches the user experience, either through an integrated chat window or shortcuts within the app.
-
Privacy and data security: Ensure the protection of personal data by complying with applicable data protection laws.
-
Sustainability and scalability: The platform must be technically sustainable and able to scale to serve a growing number of users.
-
Testing with real users to gather feedback and continuous adjustments to ensure that it truly serves the needs of the community.
-
Collaboration with local associations: Allow neighborhood associations and other community groups to use the app to help identify and assist beneficiaries who may have difficulty accessing or using the technology.
- Chatbot support for communication with the different parties involved.
Implementing a chatbot can be a valuable addition to a specialized food bank management app, providing a complementary and efficient means of interacting with users and donors. The key is to consider the chatbot as a tool within a broader ecosystem of user interaction, where all parties work together to provide a cohesive and satisfying experience.
2.1. Chatbot Advantages:
-
Improved Accessibility: A chatbot can provide users with a quick and accessible way to get information, ask questions or resolve issues without having to navigate complex menus.
-
24/7 Support: Provides users with immediate access to after-hours assistance, improving satisfaction and ongoing support.
-
Automation of routine tasks: Can handle repetitive or routine requests, such as answering frequently asked questions, registering users for food distribution, or facilitating donations, freeing up human resources for tasks that require personal attention.
-
Personalized Interaction: Chatbots, especially AI-powered ones, can offer personalized interactions based on the user's interaction history, improving the overall experience.
2.2. Integration of a chatbot with a Specialized App:
-
Complementarity: the chatbot does not have to replace the app's functionalities, but complement them. For example, it could direct users to specific sections of the app to perform actions such as donations, food requests, or profile settings.
-
Onboarding Facilitator: A chatbot can guide new users through the app registration process, explaining the different functionalities and how they can take advantage of them.
-
Feedback Gathering: In addition to handling questions and requests, the chatbot can be a valuable tool for gathering impressions and suggestions from users on how to improve the app and the services offered.
-
Alerts and Notifications: You can send proactive messages to users through the app to inform them of important updates, food collection reminders, or even promote urgent donation drives.
2.3. Implementation Considerations:
-
User Experience: Ensure that the chatbot interface is intuitive and that responses are useful and relevant. Poor implementation can frustrate users rather than help them.
-
Privacy and Security: It is crucial to properly handle personal data collected or processed by the chatbot, complying with applicable data protection laws.
-
Technical Integration: The chatbot must be well integrated with the app's database and systems to provide up-to-date information and perform actions effectively.
2.4. Chatbot Technical Characteristics:
-
Chatbot Development Platform: Choose a robust platform that allows building, testing and deploying intelligent chatbots, such as Google's Dialogflow, Microsoft Bot Framework or IBM Watson. These platforms offer NLP (Natural Language Processing) tools that help the chatbot understand and process user queries in a more human-like manner.
-
API Integration: The chatbot must be able to easily integrate with the app's APIs to perform actions such as querying information, logging requests, or initiating processes based on user interactions.
-
Scalability and Maintenance: Ability to scale on demand and ease of upgrading and maintaining the system as new functionality is added or existing functionality is updated.
-
Analytics and Reporting: Tools to monitor interactions, analyze user behavior and collect feedback to continuously improve chatbot performance.
2.5. Chatbot integration within the App vs. interacting components:
The decision between fully integrating the chatbot within the app or developing them as two interacting parts depends on several factors:
-
Full Integration: offers a smoother user experience and tighter control over the UI and UX. Ideal when the chatbot is a central component of the user interaction.
-
Separate Interacting Components: As mentioned in the previous section, the choice is to separate the App from the Chatbot, to facilitate the development and update of each component independently, in addition to enabling interaction with other channels in addition to the app, such as websites or messaging platforms.
-
Use of Microservices and APIs: Regardless of the integration, use an architecture based on microservices with communication through robust APIs. This allows for greater flexibility and scalability, facilitating integration and data management between the chatbot and the app.
- A corporate website, also for support, information and presence on the Web.
A Food Bank's corporate website plays a crucial role in the organization's communication, information and service strategy. Beyond serving as a platform to reinforce online presence, it can provide significant value in several ways:
-
About Us: Provide detailed information about the food bank's mission, vision, and values, including success stories and testimonials to build trust and transparency.
-
Education: Publish educational content about food insecurity, nutrition, and how the community can get involved to make a difference. This includes blogs, impact reports, and educational resources.
-
Beneficiary Resources: Offer guides, nutrition tips, and helpful resources for food bank beneficiaries, including how to apply for assistance and what to expect from the process.
-
Volunteer Center: Information on how to become a volunteer, opportunities available, testimonials from current volunteers, and the importance of volunteering to the food bank's mission.
-
Donation Portal: Enable a secure, user-friendly portal for monetary donations, including options for one-time, recurring, and tribute/memorial donations. Specific fundraising campaigns can also be highlighted.
-
Volunteer Opportunities: Offer donors, especially corporate donors, opportunities for personal involvement through volunteering, strengthening their commitment and relationship to the cause.
-
Financial Transparency: Provide annual reports, breakdowns of the use of funds, and any certification or recognition that attests to the transparent and efficient management of donations.
-
Events and Campaigns: Calendar of events, food drives, and other initiatives to engage the community. This may include functionality for users to register or sign up for events.
-
News and Updates: News section to keep the community informed about recent activities, accomplishments, and operational updates from the food bank.
-
Social Connection: Incorporate functionalities that allow visitors to follow and share content on social media platforms, increasing the visibility and reach of the food bank's message.
-
Location Maps: Display locations of food distribution points and donation centers, facilitating access to the food bank's services.
-
Contact and Support: Contact forms, detailed contact information, and possibly a live chat or ticketing system for inquiries.
-
Improve Visibility: Implement an effective SEO strategy to ensure that the website appears prominently in search results, making it easier for those seeking information or wanting to help to easily find the site.
-
Diversify Communication Channels:* While an app can be a powerful and efficient tool, it is important not to discount other fundraising and communication methods, such as fundraising events, direct mail campaigns, or crowdfunding platforms, which can reach different audiences.
-
Provide information about the specialized App and Chatbot, facilitating access to these tools.
- Collaboration of neighborhood associations:
Incorporating neighborhood associations not only in the day-to-day operation but also in strategic planning and app development can significantly strengthen the impact and sustainability of the food bank. Close collaboration ensures that the service remains relevant and effective, responding to changing community needs with local support and engagement.
Collaboration with neighborhood associations can be extremely beneficial to the management and operation of a food bank, especially when combined with technology, such as an app. Neighborhood associations have a deep understanding of their communities, which can be invaluable in a number of areas:
4.1. Food Distribution:
-
Local Logistics: Partnerships can help identify the most accessible and convenient locations for food distribution points in the community, ensuring that they are within reach of those most in need.
-
Volunteering: They could coordinate local volunteers to support food distribution, collection of donations, and other necessary activities.
4.2. Community Involvement:
-
Promotion and Awareness: Use your local networks and events to promote the food bank, raise awareness of food insecurity, and encourage donation and volunteerism.
-
Direct Feedback: As representatives of the communities, they can provide valuable feedback on how the service is meeting local needs and suggest improvements.
4.3. App Improvement:
-
Functionality Proposals: Offer ideas for new functionality or improvements based on the needs and experiences of community users.
-
Testing and Feedback: Participate in the app testing process to ensure that the app is accessible, easy to use, and meets the needs of the beneficiaries.
4.4. Volunteering and Training:
-
Volunteer Management: Neighborhood associations can help recruit, coordinate, and train volunteers for various functions within the food bank.
-
Community Training: Organize workshops or training sessions on nutrition, economical cooking, and other relevant skills for food bank beneficiaries.
4.5. Fundraising Strategies:
- Local Events: help organize fundraising events and donation drives in the community, leveraging their local knowledge and community networks to maximize participation.
4.6. Research and Development:
-
Needs Studies: Contribute to studies on the food and nutritional needs of the community, providing valuable data that can help improve the effectiveness of the food bank.
-
Pilot Projects: Participate in the implementation of pilot projects to test new ideas or approaches to food distribution, data collection, or app functionality.
Storage, although it could possibly be mechanized, will not be addressed, as the collaborating volunteers will be well trained and there is a system of storage by expiration dates and type of food. Using robots for storage would be too expensive and disproportionate for a local food bank.
As for food handling: packaging for distribution to recipients, organization of teams and shifts of care for recipients, etc., it will not be addressed as part of the mechanization of food management, since it is a job that volunteers can perform with great efficiency and the diversity of food, situations and interaction with users has a complexity that cannot be assumed by robotic or mechanical means, in addition to the intrinsic value of human interaction.
Personal contact with administrations and companies, for obtaining resources, as well as with the media, will obviously not be solved by any kind of automation, as it is also complex and human interaction plays a decisive role, as is the case with interviews for signing contracts and agreements, requesting resources in compliance with the different regulations existing in the various administrations, etc.
Large donations and collaborations with companies often require a more personalized approach to discuss specific details, such as large donation volumes, logistics or long-term partnership agreements.
Incident management will not be mechanized for the time being either, due to its diverse nature and almost unpredictable casuistry.
For all these types of activities in which human attention is practically indispensable, there are volunteers who are experts in different areas: from security, personal attention, incident management, contact with institutions, etc.
However, through an interactive corporate website, it is possible to answer many questions that may be important for dissemination and social recognition, such as: data on the different campaigns with easy-to-understand statistics, means of contact, dates, frequently asked questions, forms of collaboration and participation, volunteering, etc.
As for the challenges of the operation of the technological solutions in the different phases of the project, they have already been included in the previous point, when developing the characteristics of these solutions.
I believe that this project is ambitious and could be extended to any local or even national food bank, if the expected results are achieved in the different phases.
Later phases of the project could be undertaken to improve and mechanize other aspects of management, and to improve the feedback of the phases that are consolidated, as long as the technical and material means are available to implement the tasks described.
I thank all the volunteers and people with recognized experience in these matters, who have advised me and helped me to get a better understanding of all the possible difficulties, complexities and possible solutions to develop a project of this type.