Вопрос или проблема
У меня есть набор данных из примерно 75 административных регионов. Среди множества других переменных есть четыре специфические демографические переменные и число, представляющее финансирование на душу населения от государственного гранта.
Я пытаюсь найти способ определить, какие регионы наиболее похожи по демографии, но при этом получают наибольшее различие в уровнях финансирования.
Я склоняюсь к тому, чтобы использовать sklearn.neighbor для поиска наиболее похожих регионов и просто визуально находить наименее похожие уровни финансирования, но могу ли я передать ему массив из 75 элементов, с 4 значениями каждый?
Есть ли лучший способ сделать это?
Спасибо
Редактировать, чтобы включить пример таблицы:
id | бедность | помощь | одиночные родители | образовательный уровень | финансирование |
---|---|---|---|---|---|
001 | 33 | 44 | 61 | 17 | 155.10 |
002 | 29 | 13 | 21 | 1 | 255.75 |
003 | 14 | 18 | 24 | 66 | 555.74 |
Вы можете просто построить график каждой из демографических переменных (отсортированных) по сравнению с уровнем финансирования. Большие перепады на соседних точках будут тем, что вы ищете.
Я бы использовал четыре демографические переменные и создал матрицу сходства со всеми другими наблюдениями.
Затем создайте еще одну матрицу сходства, основанную только на финансировании.
Вы можете создать функцию, чтобы выбрать другое наблюдение из вашего набора, которое максимизирует разницу между демографическим сходством и сходством финансирования.
Поскольку сходство стандартизировано (0-1), вы получите наибольшее распределение, когда одно высоко, а другое низко. Это может быть не самое похожее по демографическим данным и наименее похожее по финансированию, но оно будет наиболее различным 1:1.
Затем вы можете выполнить кластеризацию, чтобы найти набор наблюдений, наиболее похожих только по демографии.
Теперь у вас есть группы схожих по демографическим данным наблюдений, и из этого списка вы можете отсортировать вывод функции по группам, чтобы найти наименее похожее наблюдение для каждого члена кластера.
Используя креативные цвета графиков по группам, это должно дать вам полезную информацию.
Ответ или решение
Чтобы решить задачу поиска административных регионов, которые являются наиболее схожими по демографическим характеристикам, но отличаются по уровню финансирования, можно использовать многомерный анализ данных. Ниже представлено более подробное описание шагов, которые следует предпринять, а также обоснование выбранных подходов.
1. Подготовка данных
Первое, что необходимо сделать, — это подготовить ваш набор данных. Убедитесь, что все демографические переменные (бедность, уровень образования, количество одиноких родителей и т.д.) нормализованы или стандартизированы. Это позволит избежать искажений, связанных с различиями в масштабах данных.
2. Построение матрицы схожести
Для начала можно создать матрицу схожести для демографических переменных. Используя библиотеку sklearn
, например, модуль sklearn.metrics.pairwise
, вы можете легко получить такую матрицу, применяя метод, такой как cosine similarity
или euclidean distance
. Этот подход позволит вам определить, насколько регионы схожи между собой по демографии.
import pandas as pd
from sklearn.metrics import pairwise_distances
# Загрузка данных
data = pd.DataFrame({
'poverty': [33, 29, 14],
'recimm': [44, 13, 18],
'loneparents': [61, 21, 24],
'edu_level': [17, 1, 66],
'funding': [155.10, 255.75, 555.74]
})
# Построение матрицы схожести по демографическим переменным
demographics = data[['poverty', 'recimm', 'loneparents', 'edu_level']]
similarity_matrix = 1 - pairwise_distances(demographics, metric='cosine')
3. Построение матрицы несхожести по финансированию
Аналогично, следует создать матрицу различий по уровню финансирования. Здесь можно использовать метод, определяющий расстояние между значениями финансирования, например, manhattan distance
.
# Построение матрицы различий для финансирования
funding = data['funding'].values.reshape(-1, 1)
funding_difference_matrix = pairwise_distances(funding, metric='cityblock')
4. Определение "оптимальной" пары регионов
На основе полученных матриц можно написать функцию, которая будет принимать на вход индексы двух регионов и возвращать разницу между их демографической схожестью и уровнем финансирования. Мы можем стремиться максимизировать эту разницу, то есть находить регионы, которые максимально схожи по демографическим данным и значительно различаются по финансированию.
def find_optimal_pair(similarity_matrix, funding_difference_matrix):
max_diff = -float('inf')
best_pair = (None, None)
for i in range(similarity_matrix.shape[0]):
for j in range(similarity_matrix.shape[0]):
if i != j:
diff = similarity_matrix[i][j] - funding_difference_matrix[i][j]
if diff > max_diff:
max_diff = diff
best_pair = (i, j)
return best_pair
5. Кластеризация
Также вы можете применять методы кластеризации, такие как k-means
или hierarchical clustering
, к демографическим данным, чтобы создать группы схожих регионов. После чего для каждой группы можно искать регионы с наименьшим уровнем схожести по финансированию.
6. Визуализация результатов
Важно визуализировать результаты анализа. Это позволит лучше понять, как располагаются регионы по различным осям. Используйте цветовую кодировку для групповой кластеризации и графики разброса для демонстрации финансирования против демографических переменных.
Заключение
В итоге, вы можете детально проанализировать данные и определить регионы, которые являются наиболее схожими по демографии, но получают существенно различные уровни финансирования. Такой подход дает возможность увидеть интересные паттерны и сформировать более обоснованные выводы для принятия решений.